Garder NSWindow avant
- Je ouvrir un NSWindow de mon principal NSWindow.
DropHereWindowController *dropHereWindowController = [[DropHereWindowController alloc] initWithWindowNibName:@"DropHereWindow"];
[dropHereWindowController showWindow:nil];
Je veux cette fenêtre afin de rester sur le dessus de ma fenêtre principale lorsque vous faites glisser un fichier depuis le finder pour que "DropHereWindow". Cependant, lors de l'ouverture du finder (ne pas avoir le focus plus) mon "DropHereWindow" passe derrière ma fenêtre principale.
J'ai essayé orderFront, makeKey, makeKeyAndFront mais rien n'y fit.
Que puis-je faire à ce sujet?
OriginalL'auteur user661577 | 2011-03-19
Vous devez vous connecter pour publier un commentaire.
Méthode:
Sous-classe de la NSWindow:
Ou tout simplement utiliser:
Niveaux disponibles:
La fenêtre des niveaux un par un jusqu'à trouver celui qui correspond à vos besoins, c'est certainement la bonne façon de faire de votre fenêtre de rester au top. Êtes-vous sûr que le niveau a été réglé correctement? Vous pouvez le vérifier avec [auto level] ou [niveau de la fenêtre].
OriginalL'auteur Anne
Vous dire:
Et puis:
Alors vous faites quelque chose de mal.
Pour une chose, une fenêtre ne devrait pas automatiquement derrière une autre fenêtre de toute façon. Soit vous êtes (ou l'utilisateur) pour les commandes de la fenêtre principale avant ou vous êtes à la commande de l'autre fenêtre. Je vais supposer que vous êtes ne pas faire le dernier.
Pour un autre,
orderFront:
,makeKeyAndOrderFront:
, etsetLevel:
faire un travail. En particulier,setLevel:
met la fenêtre sur un toute autre avion, de sorte qu'il sera toujours être devant (ou derrière, en fonction du niveau que vous choisissez) de windows avec le niveau par défaut, peu importe ce que vous faites.Je suppose que vous n'avez pas accroché, ou vous avez accidentellement déconnecté, votre
window
prise de courant à la fenêtre, ce qui signifierait que vous envoyez votreorderFront:
/setLevel:
messages ànil
, qui ne fait rien. Assurez-vous que votre prise est rempli à l'endroit où vous envoyez laorderFront:
ousetLevel:
message, en vous connectant la fenêtre de la console. Si elle dit “(null)” ou “0x0” (en fonction de comment vous vous connectez), puis votre prise détientnil
; vérifiez qu'il est bien accroché à la plume et que vous avez déjà chargé la plume/instancié de la fenêtre contrôleur.Tout ce que dit, je suis en désaccord que
setLevel:
est la bonne solution. Si vous voulez juste avoir une fenêtre de rester en avant d'une autre fenêtre, et de ne pas le mettre sur tout un autre plan, faire une fenêtre enfant.setLevel
est le chemin à parcourir. Mes applications utilise généralementsetLevel
pour déposer des boîtes afin de les rendre toujours rester au-dessus de tout (en fait tomber plus facile). L'utilisateur peut toujours désactiver ce comportement avec une case à cocher. Je suis d'accord que votre solution est la meilleure pour la commande de windows dans une seule application.peut être aussi approprié pour la commande de windows au sein d'une seule application, en ce que certains de l'utilitaire de windows cacher lorsque l'utilisateur passe à une autre application. La question clé est de savoir si vous voulez mettre la fenêtre sur un autre plan devant (ou derrière) le plan de windows habitent normalement, comme pour les palettes d'outils, ou vous voulez juste pour mettre une fenêtre toujours devant (ou derrière) une autre fenêtre spécifique. J'ai lu la question de l'intention de la dernière.
OriginalL'auteur Peter Hosey
Swift 4.0, Xcode 9.0
Vous pouvez définir la
level
propriété de votreNSWindow
àfloating
. Par exemple, si vous êtes sous-classementNSWindow
, vous pouvez la définir dans le remplacement init.Vous pouvez également obtenir des
NSWindow
de votreNSWindowController
parself.window?
.Il y a différents niveaux:
OriginalL'auteur Jay Wong
Ce a travaillé pour moi, l'espoir que peut-être utile de
OriginalL'auteur Mrug
À l'aide de la
CGWindowLevelKey
kCGMaximumWindowLevelKey
fonctionne également.CGWindowLevelKey de Référence
OriginalL'auteur Daniel Storm
NSStatusWindowLevel
, tout l'utiliser après un certain délai de petit après le démarrage de l'application (ou après la création de la fenêtre).OriginalL'auteur OlDor