2013-10-09 158 views
0

我想知道是否有一種方法來繼承NSSavePanel。或者,如果你要創建一個虛擬對象,你會如何模仿NSSavePanel的beginSheetModalForWindow:CompletionHandler函數?是否可以繼承NSSavePanel?

-(void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger *))handler{ 

我就如何落實在.M類文件中的函數,當執行塊處理消隱。

+1

你究竟在做什麼?爲什麼你想要NSSavePanel的子類? –

+0

只需使用一個需要返回的插件。我主要只是想重新創建NSSavePanel的beginheetmodalforwindow窗口。 – Dan68am

+1

@ Dan68am - 你是什麼意思「如何實現塊處理程序」?如果你編寫了一個方法,然後在方法中使用標準函數調用語法調用該方法,則不會「實現」該塊。 – CRD

回答

3

簡短的回答:沒有

更長的答案:在這裏龍

這是可能的,但東西可能會打破。您也可以使用類別添加方法,他們可能會工作,或者他們可能不工作。由於支持App Sandbox實現NSOpenPanel的方式出現了這些問題 - 幕後發生了各種各樣的欺詐行爲,甚至僅僅調用類中現有方法的便利類方法都可能導致OS X和對話框不報告錯誤出現。 NSOpenPanel是一種微妙的生物,應該儘可能少地觸及並且只有非常小心。

在另一個類中包裝一個NSOpenPanel實例是一個不同的故事,不應該讓它煩惱。走那條路。

附錄重新:評論

beginSheetModalForWindow的聲明是:

- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger result))handler 

的完成處理程序被傳遞指示哪個按鈕被按下的值。要採取行動依賴於您可以使用標準if

NSOpenPanel *openPanel; 
NSWindow *hostWindow; 
... 
[openPanel beginSheetModalForWindow:hostWindow 
        completionHandler:^(NSInteger returnCode) 
            { 
             if (returnCode == NSFileHandlingPanelOKButton) 
             { 
              // OK pressed 
              ... 
             } 
             else 
             { 
              // Cancel pressed 
              ... 
             } 

            } 
]; 
+0

我會檢查這個答案,因爲你已經回答了一般問題。我認爲我不太瞭解塊方法作爲我的問題。我希望完成處理程序在按下取消按鈕或NSOKButton時執行某些操作。所以'如果(處理程序== NSOKButton){'做些什麼。 – Dan68am

+0

@ Dan68am - 增加了一個附錄HTH。 – CRD

+0

謝謝您的深入解答。幫助我更好地理解這一點 – Dan68am

相關問題