2011-02-23 61 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

相关问题