私は最初のMacアプリを作成しましたが、ウィンドウが1つしかないので、赤いボタンを押すと終了します。このボタンは、現時点ではアプリを終了するのではなく、ウィンドウを閉じます。このボタンの動作を編集する方法が見つからないようです。ヒントはありますか?これはXcode4にあり、Applescriptベースのアプリであることに注意してください。
2 に答える
AppleScriptObjC はわかりませんが、objective-c で行う方法は次のとおりです。これらを簡単に変換できると確信しています。
基本的に何も変更する必要はありません。このメソッドをアプリのデリゲートに入れるだけです。これは NSApplication Delegate メソッドであるため、最後のウィンドウが閉じられたときにアプリによって自動的に呼び出されます。他にも多くの NSApplication Delegate メソッドがあるため、これらのメソッドを調べて、他に何ができるかを確認する必要があります。幸運を。
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication {
return YES;
}
ところで、別の方法は NSWindowDelegate メソッドを使用することでした。AppDelegate (または他のクラス) をウィンドウのデリゲートとして設定する必要があります...
[[self window] setDelegate:self];
具体的には、これらの NSWindowDelegate メソッドのいずれかを使用して、赤い閉じるボタンの動作を変更できます。たとえば、あなたが要求したようにそこに NSApp の terminate: メソッドを発行することができますが、それらの中で何でもすることができます。
- (BOOL)windowShouldClose:(id)sender
- (void)windowWillClose:(NSNotification *)notification
しかし、 applicationShouldTerminateAfterLastWindowClosed: はあなたが望むものです。タスクを達成する方法がたくさんあることを示したいだけです。
初めてのアプリおめでとうございます!
@regulus6633 によって提供された回答は、私にとってはうまくいきませんでした。Xcode のビルドに失敗しました。
これは、OP と同様に、私の Xcode アプリが「Cocoa-AppleScript」アプリであり、AppDelegate が AppleScript で記述されているためです。
したがって、解決策は次のとおりです。
script AppDelegate
--- YOUR OTHER CODE ---
--- QUIT APP WHEN WINDOW IS CLOSED ---
on applicationShouldTerminateAfterLastWindowClosed_(sender)
return true
end applicationShouldTerminateAfterLastWindowClosed_
end script
このハンドラーをスクリプト ブロックの最後に配置しましたが、おそらく問題にはなりません。
http://www.macscripter.net/viewtopic.php?pid=117933#p117933でこのソリューションを見つけました