我試圖以編程方式關閉模式警報表:NSAlert關閉警報編程方式使用beginSheetModalForWindow時:這樣調用時
[alert beginSheetModalForWindow:contacts modalDelegate:self didEndSelector:@selector(myAlertEnded:code:context:) contextInfo:NULL];
我試圖以編程方式關閉模式警報表:NSAlert關閉警報編程方式使用beginSheetModalForWindow時:這樣調用時
[alert beginSheetModalForWindow:contacts modalDelegate:self didEndSelector:@selector(myAlertEnded:code:context:) contextInfo:NULL];
你最好有一個這樣的方法在你的控制器(在modalDelegate
):
- (IBAction) cancelClicked: (id) sender {
// Cancel the sheet and close.
[NSApp endSheet: [self window]];
}
...這將在模片被連接到一個取消按鈕(或爲此事的OK按鈕但這可能會援引一些分拆處理)。
您還需要實現這個didEndSelector
以實際刪除表:
- (void) didEndSheet: (id) modalSheet returnCode: (NSInteger) returnCode contextInfo: (void*) contextInfo {
// Remove the sheet.
[modalSheet orderOut: nil];
}
如果我沒有記錯我舀這個從蘋果文檔的例子。
感謝羅傑,是的,這正是我想要理清的。 – 2012-03-08 13:38:00
請注意,在10.10中不推薦使用'endSheet' – 2015-03-21 10:49:41
我有同樣的問題,我解決了這個問題。
1)啓動片
[myAlertSheet beginSheetModalForWindow:self.view.window modalDelegate:self didEndSelector:@selector(showAlertDidEnd: returnCode: contextInfo:) contextInfo:nil];
2)以編程關閉模態片:
[NSApp endSheet:[myAlertSheet window]];
myAlertSheet
是NSAlert
實例變量保持在屏幕上的模態片的軌道。然後襯頁消息稱選擇:
- (void)showAlertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo
{...}
希望以上的有用
在NSWindow
你會發現一種稱爲attachedSheet
。如果有的話,它會產生一個附在這個窗口上的表單的引用。該表本身也僅僅是一個NSWindow
。因此,你可能想試試這個:
NSWindow *window = [NSApp mainWindow];
[[window attachedSheet] close];
你的問題是什麼? – 2012-03-05 03:09:24
嗨羅布,這個問題更像是我在主題中的一個陳述,但暗示並已經由羅傑回答。 – 2012-03-08 13:36:05