2012-03-04 70 views

回答

4

你最好有一個這樣的方法在你的控制器(在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]; 

} 

如果我沒有記錯我舀這個從蘋果文檔的例子。

+0

感謝羅傑,是的,這正是我想要理清的。 – 2012-03-08 13:38:00

+0

請注意,在10.10中不推薦使用'endSheet' – 2015-03-21 10:49:41

6

我有同樣的問題,我解決了這個問題。

1)啓動片

[myAlertSheet beginSheetModalForWindow:self.view.window modalDelegate:self didEndSelector:@selector(showAlertDidEnd: returnCode: contextInfo:) contextInfo:nil]; 

2)以編程關閉模態片:

[NSApp endSheet:[myAlertSheet window]]; 

myAlertSheetNSAlert實例變量保持在屏幕上的模態片的軌道。然後襯頁消息稱選擇:

- (void)showAlertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo 
{...} 

希望以上的有用

3

NSWindow你會發現一種稱爲attachedSheet。如果有的話,它會產生一個附在這個窗口上的表單的引用。該表本身也僅僅是一個NSWindow。因此,你可能想試試這個:

NSWindow *window = [NSApp mainWindow]; 
[[window attachedSheet] close]; 
相關問題