单击按钮时不要忽略NSAlert

时间:2012-08-02 22:04:24

标签: objective-c macos cocoa

我正在展示一个带有自定义视图和三个按钮的NSAlert。自定义视图有两个文本字段,允许用户登录。

在Mac App Store中,会出现具有类似设计的NSAlert。当用户单击登录按钮时,NSAlert不会被忽略(直到验证凭据)。 Apple如何保持警惕?

2 个答案:

答案 0 :(得分:9)

获取您希望表现不同的NSButton。改变目标和行动。 (要调用原始目标/操作,请在更改之前保留它们。)

NSAlert *alert = ...;
NSButton *button = [[alert buttons] objectAtIndex:...];

id oldTarget = [button target];
SEL oldAction = [button action];
[button setTarget:self];
[button setAction:@selector(verifyCredentials:)];

或者,您可能希望将警报构建为自定义窗口控制器和XIB(在App Store的情况下Apple就是这样做的。)在这种情况下,您可以对按钮行为进行细粒度控制。 / p>

答案 1 :(得分:-1)

Swift 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        
    }
}