2010-02-11 6 views
3

Je travaille sur un nouveau Mac App et je veux ouvrir ma fenêtre de préférences, j'ai 2 fichiers Nib (xib), un pour la fenêtre principale, et un pour la fenêtre de préférences, puis j'ai un openPreferences Action, qui affiche la fenêtre de préférences, sth. comme ceci:Fenêtre Préférences Objective-C makeKeyAndOrderFront ou showWindow?

- (IBAction)openPreferences:(id)sender 
{ 
    PrefCont *cont = [[PrefCont alloc] init]; 
    [cont showWindow:self]; 
} 

ce code fonctionne, mais quand je clique sur plus d'une fois sur l'élément ouvert Préférences Menu, puis la fenêtre Préférences ouvre deux ou plus de deux fois.

Y at-il une possibilité de le faire avec sth. comme makeKeyAndOrderFront mais il doit être appelé par le PrefController?

Ou puis-je demander au Mac si la fenêtre est ouverte? sinon, montrez-le ou sth. lier ceci.

Ce serait très utile, merci à tout le monde!

+0

Assurez-vous d'avoir désactivé le paramètre "Visible au lancement" de votre fenêtre dans Interface Builder. –

Répondre

6

Si vous voulez éviter la double symptôme de la fenêtre, vous devriez faire PrefCont * cont un Ivar de cette classe, puis faire:

- (IBAction) openPreferences:(id)sender { 
    if (cont == nil) { 
    cont = [[PrefCont alloc] init]; 
    } 
    [cont showWindow:sender]; 
} 

De cette façon, vous ne serez en train de créer un contrôleur de préférence, et dire que un pour montrer sa fenêtre.

Ne pas oublier de [cont release]; lorsque vous avez terminé ...

+0

merci, cette idée me vient hier soir: D Et c'est vrai, mais merci beaucoup :) – ahmet2106

5

Une meilleure façon serait d'avoir la classe PrefCont ont une routine singleton comme:

+(PrefCont*)prefs 
{ 
    static PrefCont* prefs = nil; 
    if (!prefs) 
    prefs = [[PrefCont alloc] init]; 

    return prefs; 
} 

et chaque fois que vous voulez Pour afficher les préférences, appelez simplement

[[PrefCont prefs] showWindow:sender]; 
Questions connexes