NSAlert 多个按钮
NSAlert multiple buttons
我有一个带有两个按钮的 NSAlert:
var al = NSAlert()
al.informativeText = "You earned \(finalScore) points"
al.messageText = "Game over"
al.showsHelp = false
al.addButtonWithTitle("New Game")
al.runModal()
它运行完美,但我不知道如何识别用户按下了哪个按钮。
runModal
将 return "the constant positionally identifying the button clicked."
This 是如何定义与您的按钮关联的值的:
enum {
NSAlertFirstButtonReturn = 1000,
NSAlertSecondButtonReturn = 1001,
NSAlertThirdButtonReturn = 1002
};
所以,基本上你应该做的是:
NSModalResponse responseTag = al.runModal();
if (responseTag == NSAlertFirstButtonReturn) {
...
} else {
...
Swift 4个回答:
let alert = NSAlert()
alert.messageText = "Alert title"
alert.informativeText = "Alert message."
alert.addButton(withTitle: "First")
alert.addButton(withTitle: "Second")
alert.addButton(withTitle: "Third")
alert.addButton(withTitle: "Fourth")
let modalResult = alert.runModal()
switch modalResult {
case .alertFirstButtonReturn: // NSApplication.ModalResponse.alertFirstButtonReturn
print("First button clicked")
case .alertSecondButtonReturn:
print("Second button clicked")
case .alertThirdButtonReturn:
print("Third button clicked")
default:
print("Fourth button clicked")
}
extension NSViewController {
struct CustomAlertButton {
var title: String
var action: () -> Void
}
func showAlert(title: String, msg: String, customActions: [CustomAlertButton] = []) {
DispatchQueue.main.async {
let alert = NSAlert()
alert.messageText = title
alert.informativeText = msg
customActions.forEach({ item in
alert.addButton(withTitle: item.title)
})
if customActions.isEmpty {
alert.addButton(withTitle: "Ok")
}
let modalResult = alert.runModal()
let index = modalResult.rawValue - 1000//according to documentation
customActions[safe: index]?.action()
}
}
}
我有一个带有两个按钮的 NSAlert:
var al = NSAlert()
al.informativeText = "You earned \(finalScore) points"
al.messageText = "Game over"
al.showsHelp = false
al.addButtonWithTitle("New Game")
al.runModal()
它运行完美,但我不知道如何识别用户按下了哪个按钮。
runModal
将 return "the constant positionally identifying the button clicked."
This 是如何定义与您的按钮关联的值的:
enum {
NSAlertFirstButtonReturn = 1000,
NSAlertSecondButtonReturn = 1001,
NSAlertThirdButtonReturn = 1002
};
所以,基本上你应该做的是:
NSModalResponse responseTag = al.runModal();
if (responseTag == NSAlertFirstButtonReturn) {
...
} else {
...
Swift 4个回答:
let alert = NSAlert()
alert.messageText = "Alert title"
alert.informativeText = "Alert message."
alert.addButton(withTitle: "First")
alert.addButton(withTitle: "Second")
alert.addButton(withTitle: "Third")
alert.addButton(withTitle: "Fourth")
let modalResult = alert.runModal()
switch modalResult {
case .alertFirstButtonReturn: // NSApplication.ModalResponse.alertFirstButtonReturn
print("First button clicked")
case .alertSecondButtonReturn:
print("Second button clicked")
case .alertThirdButtonReturn:
print("Third button clicked")
default:
print("Fourth button clicked")
}
extension NSViewController {
struct CustomAlertButton {
var title: String
var action: () -> Void
}
func showAlert(title: String, msg: String, customActions: [CustomAlertButton] = []) {
DispatchQueue.main.async {
let alert = NSAlert()
alert.messageText = title
alert.informativeText = msg
customActions.forEach({ item in
alert.addButton(withTitle: item.title)
})
if customActions.isEmpty {
alert.addButton(withTitle: "Ok")
}
let modalResult = alert.runModal()
let index = modalResult.rawValue - 1000//according to documentation
customActions[safe: index]?.action()
}
}
}