カスタムビューと3つのボタンを備えたNSAlertを表示しています。カスタムビューには2つのテキストフィールドがあり、ユーザーはログインできます。
Mac App Storeでは、同様のデザインのNSAlertが登場します。ユーザーがサインインボタンをクリックしても、NSAlertは閉じません(資格情報が確認されるまで)。Appleはどのようにしてアラートを維持していますか?
カスタムビューと3つのボタンを備えたNSAlertを表示しています。カスタムビューには2つのテキストフィールドがあり、ユーザーはログインできます。
Mac App Storeでは、同様のデザインのNSAlertが登場します。ユーザーがサインインボタンをクリックしても、NSAlertは閉じません(資格情報が確認されるまで)。Appleはどのようにしてアラートを維持していますか?
NSButton
あなたが違った振る舞いをしたいのを手に入れてください。ターゲットとアクションを変更します。(元のターゲット/アクションを呼び出すには、変更する前にそれらを保持します。)
NSAlert *alert = ...;
NSButton *button = [[alert buttons] objectAtIndex:...];
id oldTarget = [button target];
SEL oldAction = [button action];
[button setTarget:self];
[button setAction:@selector(verifyCredentials:)];
または、アラートをカスタムウィンドウコントローラーおよびXIBとして作成することもできます(これは、AppleがApp Storeの場合に行った方法です)。その場合、ボタンの動作をきめ細かく制御できます。
スウィフト4スタイル
let alert = NSAlert()
alert.alertStyle = .informational
alert.messageText = "Y/N?"
alert.addButton(withTitle: "Y")
alert.addButton(withTitle: "N")
guard let window = view.window else { return } // for NSViewController
alert.beginSheetModal(for: window) { res in
if res == .alertFirstButtonReturn {
// "Y" action
} else {
// "N" action
}
}