在 Swift 开发中,Alert
通常与用户界面(UI)交互相关,主要用于显示 提示框、警告框或通知框 等弹出信息给用户。这种机制在 iOS 和 macOS 应用开发中被广泛使用。根据开发平台的不同以及具体使用场景,Alert
的实现方式和功能有所不同。
以下将分 iOS 和 macOS 平台详细介绍 Alert
的使用方法及其细节。
1. iOS——UIAlertController
(UIKit)
#
在 iOS 中,UIAlertController
是创建和显示 提示框(Alert)、动作表(Action Sheet) 的主要类。它支持:
- 警告框(Alert): 用于显示信息,要求用户作出选择。
- 动作表(Action Sheet): 通常从屏幕底部弹出,用于表现与用户当前操作相关的上下文选项。
基础用法 #
1.1 显示一个简单的警告框 #
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 创建 Alert
let alert = UIAlertController(
title: "警告",
message: "这是一个简单的提示框",
preferredStyle: .alert
)
// 添加按钮(操作)
alert.addAction(UIAlertAction(title: "确认", style: .default, handler: nil))
// 显示 Alert
self.present(alert, animated: true, completion: nil)
}
}
- 代码解析:
title
:警告框的标题,例如"警告"
。message
:显示的主要信息,例如"这是一个简单的提示框"
。preferredStyle
:提示框类型,支持.alert
(窗口中央)或.actionSheet
(从底部弹出)。
1.2 添加多个按钮选项 #
你可以为用户提供多个操作,通过回调处理用户的选择。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let alert = UIAlertController(
title: "选择操作",
message: "你可以选择以下操作",
preferredStyle: .alert
)
// 添加按钮 - 确认
alert.addAction(UIAlertAction(title: "确认", style: .default, handler: { _ in
print("用户选择了 确认")
}))
// 添加按钮 - 取消
alert.addAction(UIAlertAction(title: "取消", style: .cancel, handler: { _ in
print("用户选择了 取消")
}))
// 添加按钮 - 错误操作
alert.addAction(UIAlertAction(title: "删除", style: .destructive, handler: { _ in
print("用户选择了 删除")
}))
self.present(alert, animated: true, completion: nil)
}
}
- 多个按钮样式:
.default
:普通样式按钮(默认样式)。.cancel
:取消操作样式的按钮,通常用来表示退出操作。.destructive
:破坏性操作的按钮(通常是删除或危险操作),文字显示为红色。
1.3 使用动作表(Action Sheet) #
动作表通常用于在屏幕底部显示一组对用户当前操作的相关选项。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let actionSheet = UIAlertController(
title: "选择操作",
message: "你可以选择以下任务",
preferredStyle: .actionSheet
)
// 添加按钮 - 确认
actionSheet.addAction(UIAlertAction(title: "确认", style: .default, handler: { _ in
print("用户选择了 确认")
}))
// 添加按钮 - 取消
actionSheet.addAction(UIAlertAction(title: "取消", style: .cancel, handler: { _ in
print("用户选择了 取消")
}))
self.present(actionSheet, animated: true, completion: nil)
}
}
- 区别:
Alert
:弹窗显示在屏幕中间,用户必须点击按钮关闭。Action Sheet
:弹窗从屏幕底部滑出,常见于上下文菜单操作。
适用于 iPhone、iPad 的不同优先级 #
在 iPad 上,Action Sheet
显示方式有所不同,通常需要指定其显示的锚点(sourceView
/ sourceRect
):
actionSheet.popoverPresentationController?.sourceView = self.view
actionSheet.popoverPresentationController?.sourceRect = CGRect(x: 0, y: 0, width: 1, height: 1)
2. iOS / macOS——Alert
in SwiftUI
#
在 SwiftUI 中,Alert
是更现代化的方式,同样可以在 iOS 和 macOS 上显示警告框,提供简单的信息或让用户作出选择。不再直接依赖 UIAlertController
。
基础用法 #
2.1 简单的 Alert #
import SwiftUI
struct ContentView: View {
@State private var showAlert = false
var body: some View {
VStack {
Button("显示提示框") {
showAlert = true
}
.alert("提示", isPresented: $showAlert) {
// 这里是按钮
Button("确认", role: .cancel) { print("点击了确认") }
} message: {
Text("这是一个简单的提示框") // 消息内容
}
}
}
}
- 代码解析:
isPresented
: 绑定一个状态变量(@State
),当状态为true
时显示。Button
: 构建警告框的按钮操作。message
: 提示框的主要信息。role
: 按钮的角色,允许值:.cancel
: 取消操作。.destructive
: 破坏性操作(红色按钮)。
2.2 添加多个按钮 #
import SwiftUI
struct ContentView: View {
@State private var showAlert = false
var body: some View {
VStack {
Button("显示提示框") {
showAlert = true
}
.alert("选择操作", isPresented: $showAlert) {
Button("确认", role: .none) { print("用户点击了确认") }
Button("取消", role: .cancel) { print("用户点击了取消") }
} message: {
Text("请选择你要进行的操作")
}
}
}
}
2.3 使用 ActionSheet
#
在 SwiftUI 中,某些场景下可以用 ActionSheet
来替代警告。
import SwiftUI
struct ContentView: View {
@State private var showSheet = false
var body: some View {
VStack {
Button("显示动作表") {
showSheet = true
}
.confirmationDialog("选择操作", isPresented: $showSheet) {
Button("确认", role: .none) { print("确认操作") }
Button("删除", role: .destructive) { print("删除操作") }
Button("取消", role: .cancel) { print("取消操作") }
}
}
}
}
3. macOS——NSAlert
(AppKit)
#
在 macOS 应用开发中,提示框通过 NSAlert
实现,与 iOS 的 UIAlertController
功能相似。
基础用法 #
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
let alert = NSAlert()
alert.messageText = "提示框标题"
alert.informativeText = "这是一个提示框消息"
alert.alertStyle = .warning
alert.addButton(withTitle: "确认")
alert.addButton(withTitle: "取消")
let response = alert.runModal()
if response == .alertFirstButtonReturn {
print("用户点击了确认")
} else if response == .alertSecondButtonReturn {
print("用户点击了取消")
}
}
}
alertStyle
:.warning
: 警告风格提示框。.informational
: 信息风格提示框。.critical
: 严重错误提示框。
4. 小结 #
通过上面的讲解可以看到,Alert
的使用方式因平台和框架而异:
功能 | UIKit (UIAlertController ) | SwiftUI (Alert ) | AppKit (NSAlert ) |
---|---|---|---|
适用范围 | iOS(经典方式),可显示警告框或动作表。 | iOS 和 macOS(现代化声明式 UI)。 | macOS(基于 AppKit 的传统方式)。 |
主要类别 | Alert 和 Action Sheet 。 | Alert 和 ConfirmationDialog 。 | NSAlert 。 |
调用方式 | 动态实例化,通过 present() 显示。 | 绑定状态,响应式声明式。 | 创建实例,并通过 runModal() 显示。 |
按钮样式 | .default 、.destructive 、.cancel 。 | .cancel 、.destructive 。 | 必须通过 addButton 添加。 |