Question

Je suis en train d'ouvrir une fenêtre comme une feuille de sorte qu'il s'affiche en bas de la barre d'outils.J'ai utilisé le O'Reilly tutoriel pour ce faire.Cependant, je peux sortir de cette erreur:Modal session exige de la fenêtre modale.

La fenêtre de la charge de la fenêtre, si j'ai "Visible Au Lancement" est cochée.

Si elle est cochée ou non-je obtenir le "Modal session nécessite fenêtre modale" erreur.

J'ai une Fenêtre.xib, ProgressModal.xib.

Dans la Fenêtre mise en œuvre de fichier que j'ai utiliser:

-(IBAction)loadProgress:(id)sender{
    [self progressStatus:progressWindow];
}

- (void)progressStatus:(NSWindow *)window {

    [NSApp beginSheet: window
       modalForWindow: mainWindow
        modalDelegate: nil
       didEndSelector: nil
          contextInfo: nil];
    [NSApp runModalForWindow: window];
    [NSApp endSheet: window];
    [window orderOut: self];

}

- (IBAction)cancelProgressScrollView:(id)sender {
    [NSApp stopModal];
}

J'ai peut-être la ProgressModal.xib installation de mal.J'ai un NSObject qui a "Fenêtre" comme sa classe.Toutes les connexions sont faites à travers cela.

Mais encore une fois, il charge la fenêtre juste de ne pas charger comme un modal.

Des idées?

Était-ce utile?

La solution 2

Comme je l'ai dit ci-dessus, j'ai glissé un objet dans la fenêtre ProgressModal et j'ai fait mes connexions à travers cela.Ce que j'aurais dû faire a été fait le propriétaire du fichier ma classe de fenêtre.Changer cela corrigé le problème.

J'ai eu ceci depuis http://www.youtube.com/watch?v=QBKO6TD-FWA

Autres conseils

Placez le code suivant dans la première ligne de votre progressStatus méthode:

NSLog(@"%@", window);

Si vous voyez le journal de sortie est nulle, ce qui est la raison pourquoi.

Étapes pour créer un modal de la feuille à l'aide de XIB:

  1. Faites glisser un panneau à votre MainMenu.xib
  2. Ajouter @property (assign) IBOutlet NSPanel *sheetPanel; dans votre AppDelegate.h fichier
  3. @synthesize sheetPanel = _sheetPanel; dans le AppDelegate.m fichier
  4. Lien d'une Nouvelle Prise de Référencement du panneau dans le MainMenu.xib créé à l'étape 1 de la sheetPanel propriété créé à l'étape 2.
  5. À l'aide de code suivant pour afficher la feuille modale:

    [NSApp beginSheet:_sheetPanel
       modalForWindow:_mainWindow
        modalDelegate:self
       didEndSelector:@selector(didEndSheet:returnCode:contextInfo:)
          contextInfo:nil];
    

Edit: J'ai supposé que vous vouliez une fenêtre modale.Si vous voulez une feuille, n'utilisez pas du tout runModalForWindow:.

Essayez ceci:

[NSApp beginSheet: window
   modalForWindow: mainWindow
    modalDelegate: nil
   didEndSelector: nil
      contextInfo: nil];

C'est une bonne idée de définir un rappel au cas où vous en auriez besoin;E.g.

[NSApp beginSheet: window
   modalForWindow: mainWindow
    modalDelegate: self
   didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
      contextInfo: nil];

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top