在哪里可以找到有关Swift警报(UIAlertController)的清晰解释?

8 浏览
0 Comments

在哪里可以找到有关Swift警报(UIAlertController)的清晰解释?

对此找不到清晰而且有信息性的解释。

0
0 Comments

UIAlertController是iOS开发中用于显示提示框或者操作表的类,它可以通过调用presentViewController:animated:completion:方法以模态的方式展示在屏幕上。UIAlertController的样式取决于在创建时传递的参数,可以是ActionSheet或者AlertView。

与之前的UIActionSheet和UIAlertView不同的是,UIAlertController不再使用委托模式来获取回调。之前的委托模式需要在类中实现UIActionSheetDelegate或者UIAlertViewDelegate协议来处理用户的操作。虽然有一些开源项目已经使用基于闭包(或者Objective-C中的block)的回调方式替代了委托模式,但是官方的API并没有更新。UIAlertController使用了一组UIAlertAction实例来处理用户的操作,而这些UIAlertAction实例使用闭包处理用户的输入。

如果要创建一个ActionSheet样式的UIAlertController,可以使用以下代码:

func showActionSheet(sender: AnyObject) {

let actionSheetController: UIAlertController = UIAlertController(title: "Action Sheet", message: "Swiftly Now! Choose an option!", preferredStyle: .ActionSheet)

let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in

// Just dismiss the action sheet

}

actionSheetController.addAction(cancelAction)

let takePictureAction: UIAlertAction = UIAlertAction(title: "Take Picture", style: .Default) { action -> Void in

// Code for launching the camera goes here

}

actionSheetController.addAction(takePictureAction)

let choosePictureAction: UIAlertAction = UIAlertAction(title: "Choose From Camera Roll", style: .Default) { action -> Void in

// Code for picking from camera roll goes here

}

actionSheetController.addAction(choosePictureAction)

self.presentViewController(actionSheetController, animated: true, completion: nil)

}

如果要创建一个带有文本框的AlertView样式的UIAlertController,可以使用以下代码:

func showAlert(sender: AnyObject) {

let actionSheetController: UIAlertController = UIAlertController(title: "Alert", message: "Swiftly Now! Choose an option!", preferredStyle: .Alert)

let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in

// Do some stuff

}

actionSheetController.addAction(cancelAction)

let nextAction: UIAlertAction = UIAlertAction(title: "Next", style: .Default) { action -> Void in

// Do some other stuff

}

actionSheetController.addAction(nextAction)

actionSheetController.addTextFieldWithConfigurationHandler { textField -> Void in

textField.textColor = UIColor.blueColor()

}

self.presentViewController(actionSheetController, animated: true, completion: nil)

}

以上就是关于如何使用UIAlertController来显示提示框或者操作表的解释。在使用UIAlertController时,不再需要使用委托模式来获取用户的操作,而是使用闭包来处理用户的输入。

0
0 Comments

问题的原因是因为在原始的回答中,代码的语法已经发生了变化。解决方法是使用更新后的代码来实现警告框。以下是一个示例代码,用于在用户未登录到iCloud时向其发出警告。

CKContainer.default().accountStatus { (accountStatus, error) in

switch accountStatus {

case .available:

print("iCloud 可用")

case .noAccount:

print("没有iCloud账号")

// 创建简单的警告对话框

let alert = UIAlertController(title: "登录iCloud", message: "该应用程序需要iCloud。请登录您的iCloud账号以写入记录。在主屏幕上,启动“设置”,点击“iCloud”,并输入您的Apple ID。打开iCloud Drive。如果您没有iCloud账号,请点击“创建新的Apple ID”", preferredStyle: UIAlertController.Style.alert)

// 添加事件处理程序(仅关闭对话框)

alert.addAction(UIAlertAction(title: "取消", style: UIAlertAction.Style.cancel, handler: nil))

// 显示警告框

self.present(alert, animated: true, completion: nil)

case .restricted:

print("iCloud 受限")

case .couldNotDetermine:

print("无法确定iCloud状态")

}

}

以上代码会检查iCloud的账户状态,并根据不同的状态给出相应的响应和警告。如果用户未登录到iCloud,将会弹出一个警告框,提示用户登录iCloud账号以使用该应用程序的功能。

0
0 Comments

在我搜索了一段时间后,我没有找到一个清晰的解释,即使在它的类参考中也是如此。虽然它可以使用,但对我来说不够清楚。所以在收集了一些信息后,我决定自己解释一下(希望能有所帮助)。下面是解释:

1. `UIAlertView` 已经被弃用,如下所指出:UIAlertView in Swift

2. 在iOS8及以上版本中应该使用 `UIAlertController`,所以首先我们需要实例化它,构造函数(init)有三个参数:

2.1 title:String -> 在对话框顶部显示的粗体文本

2.2 message:String -> 较小的文本(几乎可以解释自己)

2.3 `prefferedStyle:UIAlertControllerStyle` -> 定义对话框的样式,在大多数情况下为 `UIAlertControllerStyle.Alert`

3. 现在我们可以使用`showViewController` 或 `presentViewController` 来将它显示给用户,并将我们的警告作为参数传递

4. 我们可以使用以下方法与用户进行交互:

4.1 `UIAlertController.addAction` 来创建按钮

4.2 `UIAlertController.addTextField` 来创建文本字段

以下是一些代码示例:

示例1:简单的对话框

func alert1(sender: UIButton) {

//简单的对话框

let alert=UIAlertController(title: "Alert 1", message: "One has won", preferredStyle: UIAlertControllerStyle.alert);

//显示对话框

show(alert, sender: self);

}

示例2:带有一个输入文本字段和两个按钮的对话框

func alert2(sender: UIButton) {

//带有一个输入文本字段和两个按钮的对话框

let alert=UIAlertController(title: "Alert 2", message: "Two will win too", preferredStyle: UIAlertControllerStyle.alert);

//默认的输入文本字段(没有配置...)

alert.addTextField(configurationHandler: nil);

//没有事件处理程序(只是关闭对话框)

alert.addAction(UIAlertAction(title: "No", style: UIAlertActionStyle.cancel, handler: nil));

//带有闭包的事件处理程序

alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: {(action:UIAlertAction) in

let fields = alert.textFields!;

print("Yes we can: "+fields[0].text!);

}));

present(alert, animated: true, completion: nil);

}

示例3:带有自定义输入文本字段和一个按钮的对话框

func alert3(sender: UIButton) {

//一个输入文本字段和一个按钮

let alert=UIAlertController(title: "Alert 3", message: "Three will set me free", preferredStyle: UIAlertControllerStyle.alert);

//配置的输入文本字段

var field:UITextField?;//使用?运算符,因为它稍后初始化

alert.addTextField(configurationHandler:{(input:UITextField)in

input.placeholder="I am displayed, when there is no value ;-)";

input.clearButtonMode=UITextFieldViewMode.whileEditing;

field=input;//将其分配给外部变量(供以后引用)

});

//alert3的事件处理程序(在与警告同一范围内定义,并作为事件处理程序传递)

func yesHandler(actionTarget: UIAlertAction){

print("YES -> !!");

//从'relevant input'中打印文本

print(field!.text!);//使用!运算符,因为此处是可选的

}

//带有预定义函数的事件处理程序

alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: yesHandler));

present(alert, animated: true, completion: nil);

}

希望这对你有所帮助,祝你好运!

0