2011-02-23 33 views
4

我創建了一個帶有退出按鈕的窗口。在我的controller.h中,我創建了一個這樣的動作。綁定按鈕動作關閉可可中的應用程序

-(IBAction) exitApp : (NSButton*) sender; 

我應該在相應的controller.m中寫入什麼內容,以便在單擊「退出」按鈕時應用程序終止。

回答

9

如果您唯一的目標是終止應用程序,則不需要自定義操作。只需將您的按鈕掛接到Interface Builder中應用程序對象中的terminate:操作即可。

如果你確實需要的自定義exitApp:動作,你可以這樣定義它:

- (IBAction)exitApp:(NSButton*)sender { 
    // custom termination code 
    [[NSApplication sharedApplication] terminate:nil]; 
} 
+0

啊,謝謝你的解釋。這個對我有用。 – harihb 2011-02-23 09:07:22

4
-(IBAction) exitApp:(id)sender { 
    [NSApp terminate: nil]; 
} 
11

你甚至都不需要編寫用於此目的的操作方法。主筆尖的「文件所有者」是表示正在運行的應用程序本身的NSApplication實例,它具有終止應用程序的方法terminate:

因此,只需將您的按鈕連接到「文件所有者」的terminate:方法即可。您可以看到「接口」構建器提供的菜單欄的「退出​​」條目連接到相同目標的相同方法。

如果你真的堅持,實現

-(IBAction)exitApp:(NSButton*)sender { 
    [[NSApplication sharedApplication] terminate:nil]; 
} 

最後要注意,一個應用程序是作出退出,但有一個應用程序,以做出退出。所以,在你的按鈕上,不要把標籤退出 ...這是一個Windows主機。相反,使用動詞退出。方法選擇器中的動詞終止是Cocoa術語中剩餘的NextStep-ism,但不應將其用於應用程序的可見部分。

的另一件事是可以實現的委託方法

-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication 
{ 
    return YES; 
} 

,這樣應用程序時關閉最後一個窗口會自動退出,然後你可以不設退出按鈕。見the documentation

+0

哇,謝謝你的解釋!我會確保我會使用動詞Quit now。在這種情況下,退出應用程序是否完全終止了應用程序(如在我按cmd + w)或簡單地關閉它? – harihb 2011-02-25 04:35:29

+0

那麼,如果你實現了委託'appli ...關閉:',應用程序會在最後一個窗口關閉時自動退出。但要注意獅子的傳聞,沒有任何用戶可以區分非運行的應用程序和正在運行的應用程序,而沒有任何打開的窗口... – Yuji 2011-02-25 06:35:07

+0

你可以把這個謠傳休息。我現在在Mavericks上,不得不實現這個功能來讓應用程序在最後一個窗口關閉後終止。謝謝(你的)信息。正是我所期待的。 – Shammi 2014-10-02 03:37:30