So lassen Sie uns sagen, dass ich eine Methode wie diese haben, die, wenn document
zu überprüfen verwendet wird modifiziert worden ist, bevor es tatsächlich endet:Anzeige Ja-Nein NSAlert modal und bekommen Wert innerhalb der gleichen Methode
- (BOOL) canCloseDocument:(id)document
{
if ([document modified])
CONFIRM_ALERT(@"Close Document",
@"Are you sure you want to close this document?",
[[core browser] window],
@selector(confirm:code:context:),
nil);
else
return YES;
}
In diesem Fall wird die confirm:code:context:
Methode aufgerufen und NOTHING wird von canCloseDocument
zurückgegeben.
Hier ist meine CONFIRM_ALERT
Definition:
#define CONFIRM_ALERT(X,Y,Z,W,V) \
NSAlert* confirmAlert = [NSAlert alertWithMessageText:X \
defaultButton:@"OK" \
alternateButton:@"Cancel" \
otherButton:nil \
informativeTextWithFormat:Y]; \
[confirmAlert beginSheetModalForWindow:Z \
modalDelegate:self \
didEndSelector:W \
contextInfo:V];
Frage:
Wie könnte ich es tun, so dass das Alert-Blatt angezeigt wird, und der Wert (OK gedrückt Abbrechen gedrückt?) wird innerhalb der gleichen Methode (canCloseDocument:
) abgerufen, so dass entweder YES
oder NO
?
Ich habe 'runModal:' aber es wird nicht als ein Blatt angezeigt ... so wie mache ich das? Wie macht es NSOpenPanel? (Es ist genau dasselbe, nicht wahr?) –
Was ich auszudrücken versuchte ist, dass du * entweder * modal * sein kannst * oder * du kannst ein Blatt benutzen, aber du kannst nicht beides. Blätter sind von Natur aus nicht modal. (Wir sprechen davon, dass sie window-modal sind, aber das ist nicht modal in dem Sinne, wie Sie wollen, wo sie synchron im Verlauf eines einzelnen Methodenaufrufs verarbeitet werden können.) NSOpenPanel macht auch nicht die Art von Sache, die Sie wollen. –