macOS 向けアプリって終了しないの?

macOS向けアプリを作ってみて、気になった箇所がありました。

アプリを終了してもドックにアイコンが残ってるんだけどなんでなんだろう?

よくわからないので、検索しました。

 

Xcode|OS X Closeボタンでアプリを終了させる

 

どうも、自分で終了するコードを入れないといけないようです。

基本的な事が分かってなかったんだなぁ

環境

  • OS X EI Capitan 10.11.5
  • xcode7.3.1
// ----------------------------------------------------------------------
//
// Closeボタンを押すと呼ばれるDelegate method
// applicationShouldTerminateAfterLastWindowClosed:をAppdelegate.mに追記
// YESを返すとアプリが強制終了します。
// NOを返すと何もなかったことになります。
//
// ----------------------------------------------------------------------
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
    return YES;
}

appdelegate.m に入れるのを忘れずに!

 

あと、このかたのサイトにCloseボタンを押してドックに残ったアイコンをクリックすると再度表示する方法の記事がありました。

 

 

実装してみると、こっちの方が合っているように気がしてきました。

今作ってるアプリの終了方法はこっちにしよう!

こっちも appdelegate.m です!

 

// ----------------------------------------------------------------------
//
// Closeボタンを押すと呼ばれるDelegate method
// applicationShouldTerminateAfterLastWindowClosed:をAppdelegate.mに追記
// YESを返すとアプリが強制終了します。
// NOを返すと何もなかったことになります。
//
// ----------------------------------------------------------------------
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
    // return YES;
    return <strong><span style="color: #ff0000;">NO</span></strong>;
}

// ----------------------------------------------------------------------
// Dockにあるアイコンをクリックすると呼ばれる
// Dockにあるアプリアイコンをクリックすると呼ばれるDelegate method AppDelegate.mm
// applicationShouldHandleReopen:hasVisibleWindows:をappdelegate.mに追記
// 閉じたwindowを全て再表示させます。
// ----------------------------------------------------------------------
- (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag {
    if (!flag) {
        for (NSWindow *openWindow in sender.windows) {
            [openWindow makeKeyAndOrderFront:self];
        }
    }
    return YES;
}

 

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA