【发布时间】:2012-08-02 22:04:23
【问题描述】:
我正在展示一个带有自定义视图和三个按钮的 NSAlert。自定义视图有两个文本字段,它允许用户登录。
在 Mac App Store 中,出现了具有类似设计的 NSAlert。当用户单击登录按钮时,NSAlert 不会关闭(直到验证凭据)。 Apple 如何保持警报?
【问题讨论】:
标签: objective-c macos cocoa
我正在展示一个带有自定义视图和三个按钮的 NSAlert。自定义视图有两个文本字段,它允许用户登录。
在 Mac App Store 中,出现了具有类似设计的 NSAlert。当用户单击登录按钮时,NSAlert 不会关闭(直到验证凭据)。 Apple 如何保持警报?
【问题讨论】:
标签: objective-c macos cocoa
获取您想要以不同方式表现的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 中的做法。)在这种情况下,您可以对按钮行为进行细粒度控制。
【讨论】:
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
}
}
【讨论】: