You say:
I tried orderFront, makeKey, makeKeyAndFront but nothing helped.
And then:
Method:
- (void)setLevel:(NSInteger)windowLevel
It doesn't work, the window still goes behind my main window when clicking on the finder icon.
Then you're doing something wrong.
For one thing, a window shouldn't automatically go behind another window anyway. Either you're (or the user is) ordering the main window front or you're ordering the other window back. I'll assume you're not doing the latter.
For another, orderFront:
, makeKeyAndOrderFront:
, and setLevel:
do work. In particular, setLevel:
puts the window on an entire other plane, so it will always be in front of (or behind, depending on the level you choose) windows with the default level, no matter what you do.
I would guess that you have not hooked up, or you have accidentally disconnected, your window
outlet to the window, which would mean you are sending your orderFront:
/setLevel:
messages to nil
, which does nothing. Make sure your outlet is filled in at the point where you send the orderFront:
or setLevel:
message, by logging the window to the console. If it says “(null)” or “0x0” (depending on how you log it), then your outlet holds nil
; check that it's hooked up in the nib and that you've already loaded the nib/instantiated the window controller.
All that said, I disagree that setLevel:
is the correct solution. If you just want to have one window stay in front of a specific other window, and not put it on an entire other plane, make it a child window.