使用 Swift 创建一个 NSAlert
Create an NSAlert with Swift
我在 Objective-C 中有创建和 NSAlert 的代码,但我现在想在 Swift 中创建它。
警报是为了确认用户想要删除文档。
我想要 "delete" 按钮然后 运行 删除功能和 "cancel" 按钮只是为了关闭警报。
如何在 Swift 中写这个?
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"Delete"];
[alert addButtonWithTitle:@"Cancel"];
[alert setMessageText:@"Delete the document?"];
[alert setInformativeText:@"Are you sure you would like to delete the document?"];
[alert setAlertStyle:NSWarningAlertStyle];
[alert beginSheetModalForWindow:[self window] modalDelegate:self didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) contextInfo:nil];
beginSheetModalForWindow:modalDelegate
在 OS X 10.10 Yosemite.
中已弃用
Swift 2
func dialogOKCancel(question: String, text: String) -> Bool {
let alert: NSAlert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = NSAlertStyle.WarningAlertStyle
alert.addButtonWithTitle("OK")
alert.addButtonWithTitle("Cancel")
let res = alert.runModal()
if res == NSAlertFirstButtonReturn {
return true
}
return false
}
let answer = dialogOKCancel("Ok?", text: "Choose your answer.")
这个returnstrue
或者false
根据用户的选择。
NSAlertFirstButtonReturn
表示添加到对话框的第一个按钮,这里是 "OK"。
Swift 3
func dialogOKCancel(question: String, text: String) -> Bool {
let alert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = NSAlertStyle.warning
alert.addButton(withTitle: "OK")
alert.addButton(withTitle: "Cancel")
return alert.runModal() == NSAlertFirstButtonReturn
}
let answer = dialogOKCancel(question: "Ok?", text: "Choose your answer.")
Swift 4
我们现在将枚举用于警报的样式和按钮选择。
func dialogOKCancel(question: String, text: String) -> Bool {
let alert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = .warning
alert.addButton(withTitle: "OK")
alert.addButton(withTitle: "Cancel")
return alert.runModal() == .alertFirstButtonReturn
}
let answer = dialogOKCancel(question: "Ok?", text: "Choose your answer.")
我想这可能对你有用...
let a = NSAlert()
a.messageText = "Delete the document?"
a.informativeText = "Are you sure you would like to delete the document?"
a.addButtonWithTitle("Delete")
a.addButtonWithTitle("Cancel")
a.alertStyle = NSAlert.Style.WarningAlertStyle
a.beginSheetModalForWindow(self.view.window!, completionHandler: { (modalResponse) -> Void in
if modalResponse == NSAlertFirstButtonReturn {
print("Document deleted")
}
})
更新了 Jose Hidalgo 对 Swift 4 的回答:
let a: NSAlert = NSAlert()
a.messageText = "Delete the document?"
a.informativeText = "Are you sure you would like to delete the document?"
a.addButton(withTitle: "Delete")
a.addButton(withTitle: "Cancel")
a.alertStyle = NSAlert.Style.warning
a.beginSheetModal(for: self.window!, completionHandler: { (modalResponse: NSApplication.ModalResponse) -> Void in
if(modalResponse == NSApplication.ModalResponse.alertFirstButtonReturn){
print("Document deleted")
}
})
选择@Jose Hidalgo 对 Swift 5
的回答
let a = NSAlert()
a.messageText = "Delete the document?"
a.informativeText = "Are you sure you would like to delete the document?"
// .alertFirstButtonReturn
a.addButton(withTitle: "Delete")
// .alertSecondButtonReturn
a.addButton(withTitle: "Cancel")
a.alertStyle = .warning
var w: NSWindow?
if let window = view.window{
w = window
}
else if let window = NSApplication.shared.windows.first{
w = window
}
if let window = w{
a.beginSheetModal(for: window){ (modalResponse) in
if modalResponse == .alertFirstButtonReturn {
print("Document deleted")
}
}
}
我尝试了上述解决方案,但无法获得适当大小的警报。我也定义了警报的大小。
let alert = NSAlert()
alert.messageText = "YOUR MESSAGE"
alert.addButton(withTitle: "BUTTON1")
alert.addButton(withTitle: "BUTTON2")
var frame = alert.window.frame
frame.size.height = 300
frame.size.width = 200
alert.window.setFrame(frame, display: true)
let stackViewer = NSStackView(frame: NSRect(x: 0, y: 0, width: 200, height: 00))
alert.accessoryView = stackViewer
alert.beginSheetModal(for: self.view.window!, completionHandler: { (modalResponse) -> Void in
if modalResponse == NSApplication.ModalResponse.alertFirstButtonReturn {
print("first btn")
}else{
print("second btn")
}
})
我在 Objective-C 中有创建和 NSAlert 的代码,但我现在想在 Swift 中创建它。
警报是为了确认用户想要删除文档。
我想要 "delete" 按钮然后 运行 删除功能和 "cancel" 按钮只是为了关闭警报。
如何在 Swift 中写这个?
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"Delete"];
[alert addButtonWithTitle:@"Cancel"];
[alert setMessageText:@"Delete the document?"];
[alert setInformativeText:@"Are you sure you would like to delete the document?"];
[alert setAlertStyle:NSWarningAlertStyle];
[alert beginSheetModalForWindow:[self window] modalDelegate:self didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) contextInfo:nil];
beginSheetModalForWindow:modalDelegate
在 OS X 10.10 Yosemite.
Swift 2
func dialogOKCancel(question: String, text: String) -> Bool {
let alert: NSAlert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = NSAlertStyle.WarningAlertStyle
alert.addButtonWithTitle("OK")
alert.addButtonWithTitle("Cancel")
let res = alert.runModal()
if res == NSAlertFirstButtonReturn {
return true
}
return false
}
let answer = dialogOKCancel("Ok?", text: "Choose your answer.")
这个returnstrue
或者false
根据用户的选择。
NSAlertFirstButtonReturn
表示添加到对话框的第一个按钮,这里是 "OK"。
Swift 3
func dialogOKCancel(question: String, text: String) -> Bool {
let alert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = NSAlertStyle.warning
alert.addButton(withTitle: "OK")
alert.addButton(withTitle: "Cancel")
return alert.runModal() == NSAlertFirstButtonReturn
}
let answer = dialogOKCancel(question: "Ok?", text: "Choose your answer.")
Swift 4
我们现在将枚举用于警报的样式和按钮选择。
func dialogOKCancel(question: String, text: String) -> Bool {
let alert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = .warning
alert.addButton(withTitle: "OK")
alert.addButton(withTitle: "Cancel")
return alert.runModal() == .alertFirstButtonReturn
}
let answer = dialogOKCancel(question: "Ok?", text: "Choose your answer.")
我想这可能对你有用...
let a = NSAlert()
a.messageText = "Delete the document?"
a.informativeText = "Are you sure you would like to delete the document?"
a.addButtonWithTitle("Delete")
a.addButtonWithTitle("Cancel")
a.alertStyle = NSAlert.Style.WarningAlertStyle
a.beginSheetModalForWindow(self.view.window!, completionHandler: { (modalResponse) -> Void in
if modalResponse == NSAlertFirstButtonReturn {
print("Document deleted")
}
})
更新了 Jose Hidalgo 对 Swift 4 的回答:
let a: NSAlert = NSAlert()
a.messageText = "Delete the document?"
a.informativeText = "Are you sure you would like to delete the document?"
a.addButton(withTitle: "Delete")
a.addButton(withTitle: "Cancel")
a.alertStyle = NSAlert.Style.warning
a.beginSheetModal(for: self.window!, completionHandler: { (modalResponse: NSApplication.ModalResponse) -> Void in
if(modalResponse == NSApplication.ModalResponse.alertFirstButtonReturn){
print("Document deleted")
}
})
选择@Jose Hidalgo 对 Swift 5
的回答 let a = NSAlert()
a.messageText = "Delete the document?"
a.informativeText = "Are you sure you would like to delete the document?"
// .alertFirstButtonReturn
a.addButton(withTitle: "Delete")
// .alertSecondButtonReturn
a.addButton(withTitle: "Cancel")
a.alertStyle = .warning
var w: NSWindow?
if let window = view.window{
w = window
}
else if let window = NSApplication.shared.windows.first{
w = window
}
if let window = w{
a.beginSheetModal(for: window){ (modalResponse) in
if modalResponse == .alertFirstButtonReturn {
print("Document deleted")
}
}
}
我尝试了上述解决方案,但无法获得适当大小的警报。我也定义了警报的大小。
let alert = NSAlert()
alert.messageText = "YOUR MESSAGE"
alert.addButton(withTitle: "BUTTON1")
alert.addButton(withTitle: "BUTTON2")
var frame = alert.window.frame
frame.size.height = 300
frame.size.width = 200
alert.window.setFrame(frame, display: true)
let stackViewer = NSStackView(frame: NSRect(x: 0, y: 0, width: 200, height: 00))
alert.accessoryView = stackViewer
alert.beginSheetModal(for: self.view.window!, completionHandler: { (modalResponse) -> Void in
if modalResponse == NSApplication.ModalResponse.alertFirstButtonReturn {
print("first btn")
}else{
print("second btn")
}
})