绑定Button动作以关闭Cocoa中的App

har*_*ihb 4 macos cocoa

我创建了一个带退出按钮的窗口.在我的controller.h中,我创建了一个这样的动作.

-(IBAction) exitApp : (NSButton*) sender;
Run Code Online (Sandbox Code Playgroud)

我应该在相应的controller.m中写什么,以便当我单击"退出"按钮时应用程序终止.

Yuj*_*uji 11

您甚至不必为此目的编写动作方法.主nib的"文件所有者"是NSApplication表示正在运行的应用程序本身的实例,它有一个terminate:终止应用程序的方法.

因此,只需将按钮连接到terminate:"文件所有者"的方法即可.您可以看到"界面"构建器提供的菜单栏的"退出​​"条目连接到同一目标的相同方法.

如果你真的坚持,实施

-(IBAction)exitApp:(NSButton*)sender {
   [[NSApplication sharedApplication] terminate:nil];
}
Run Code Online (Sandbox Code Playgroud)

最后,注意,应用程序不作出退出,但有申请到退出.所以,在你的按钮上,不要把标签退出 ......这是一个Windows主义.相反,使用动词Quit.方法选择器中的动词终止是Cocoa术语中保留的NextStep-ism,但您不应在应用程序的可见部分中使用它.

另一件事是你可以实现委托方法

-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication
{
     return YES;
}
Run Code Online (Sandbox Code Playgroud)

以便应用程序在最后一个窗口关闭时自动退出,然后您可以取消退出按钮.请参阅文档.


小智 10

如果您的唯一目标是终止该应用程序,则不需要针对该应用程序执行自定义操作.只需将按钮挂钩到terminate:Interface Builder中Application对象中的操作即可.

如果确实需要该自定义exitApp:操作,可以像这样定义:

- (IBAction)exitApp:(NSButton*)sender {
    // custom termination code
    [[NSApplication sharedApplication] terminate:nil];
}
Run Code Online (Sandbox Code Playgroud)