OS X - Comment un NSViewController trouver sa fenêtre?
J'ai un Document de base de base de données d'application. La fenêtre principale du document a un certain nombre de points de vue, chacun contrôlé par ses propres NSViewController
qui sont activés en tant que de besoin. Je veux que chacun de ces contrôleurs de vue pour être en mesure de le faire tomber dans un personnalisé modal feuille à partir de la fenêtre de document. Cependant, parce que les points de vue sont séparées et ne sont pas dans le MyDocument
nib
je ne peut pas lier la vue de la fenêtre de document au bureau de l'IB. Cela signifie que lorsque j'appelle
[NSApp beginSheet: sheetWindow modalForWindow: mainWindow modalDelegate: self didEndSelector: @selector(didEndSheet:returnCode:contextInfo:) contextInfo: nil];
Je suis la fourniture de néant pour mainWindow
et la feuille apparaît donc détaché.
Des suggestions?
Merci Beaucoup
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
[[self view] window]
self
n'ont pas deview
méthode, puis c'est pas unNSViewController
.[self view]
de retour <NSView: 0x6000001237a0> mais[[self view] window]
renvoie la valeur null, vous ne savez pas quoi faire maintenant.En effet, c'est
self.view.window
(Swift).Cela peut être nul dans le viewDidLoad() et viewWillAppear(), mais il est fixé correctement au moment où vous arrivez à viewDidAppear().
Si votre contrôleur pouvez obtenir l'accès à la NSDocument sous-classe, vous pouvez utiliser -windowForSheet
plus sur Tim Closs réponse :
Un problème avec les autres réponses (c'est à dire, simplement en regardant
self.view.window
), c'est qu'ils ne tiennent pas compte du fait que, lorsqu'une vue est cachée, seswindow
propriété seranil
. Une vue peut être caché pour un tas de raisons (par exemple, il peut être dans l'un des les autres points de vue dans un onglet de la vue).Suivantes (swift) extension permettra d'avoir la
windowController
pour unNSViewController
par ordre croissant de la vue-contrôleur de la hiérarchie, à partir de laquelle lewindow
propriété peut ensuite être examiné: