如何编辑 alertViewController 而不根据操作将其关闭
How to edit alertViewController without dismissing it accordingly to the action
我在我的应用程序中放置了一个文本字段时有一个警告。用户可以使用它在数组中添加一些值。但是我希望所有的值都不同。因此,如果用户插入现有值,我希望清除文本字段并显示不同的占位符文本,告诉用户插入新值。
这就是我现在正在做的事情:
func appendWord(){
let alertController = UIAlertController(title:"insert a word", message: nil, preferredStyle: UIAlertController.Style.alert)
alertController.addTextField { (textField : UITextField) -> Void in
textField.placeholder = "insert here"
textField.delegate = self
}
let cancelAction = UIAlertAction(title: "cancel", style: UIAlertAction.Style.cancel) { (result : UIAlertAction) -> Void in
}
let okAction = UIAlertAction(title: "save", style: UIAlertAction.Style.default) { (result : UIAlertAction) -> Void in
let newName = alertController.textFields![0].text! as String
//Useless Stuff to Append items here [...]
//If the item already exists then i call the following function which is inside of an if statement...
self.errorInCreation()
}
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
func errorInCreation(){
let alertController = UIAlertController(title:"Insert a new word", message: nil, preferredStyle: UIAlertController.Style.alert)
alertController.addTextField { (textField : UITextField) -> Void in
textField.placeholder = "The word already exists. Insert a new one"
textField.attributedPlaceholder = NSAttributedString(string: "The word already exists. Insert a new one",attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])
textField.delegate = self
}
let cancelAction = UIAlertAction(title: "cancel", style: UIAlertAction.Style.cancel) { (result : UIAlertAction) -> Void in
}
let okAction = UIAlertAction(title: "save", style: UIAlertAction.Style.default) { (result : UIAlertAction) -> Void in
let newName = alertController.textFields![0].text! as String
//Useless Stuff to Append items here [...]
//If the item already exists then i call the following function which is inside of an if statement...
self.errorInCreation()
}
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
这应该会显示一个新的 alertViewController,直到用户插入一个新词。然而这并没有发生。当我按下保存按钮时,警报关闭。
我试图编辑当前警报,但实际上不可能。
如何清除插入的文本,更改占位符名称并让用户插入新词?
我发现这个人和我有同样的问题,但是这里指出的解决方案没有用。
Presenting new AlertViewController after dismissing the previous AlertViewController - Swift
解决方法其实很简单:不要使用 UIAlertController。它只是一个专门呈现的视图控制器,您无法控制它的外观或行为;特别是,当点击按钮时它会消失,这不是你想要的。因此,只需使用自定义呈现的视图控制器,您就可以在其中获得所需的控件。
我在我的应用程序中放置了一个文本字段时有一个警告。用户可以使用它在数组中添加一些值。但是我希望所有的值都不同。因此,如果用户插入现有值,我希望清除文本字段并显示不同的占位符文本,告诉用户插入新值。
这就是我现在正在做的事情:
func appendWord(){
let alertController = UIAlertController(title:"insert a word", message: nil, preferredStyle: UIAlertController.Style.alert)
alertController.addTextField { (textField : UITextField) -> Void in
textField.placeholder = "insert here"
textField.delegate = self
}
let cancelAction = UIAlertAction(title: "cancel", style: UIAlertAction.Style.cancel) { (result : UIAlertAction) -> Void in
}
let okAction = UIAlertAction(title: "save", style: UIAlertAction.Style.default) { (result : UIAlertAction) -> Void in
let newName = alertController.textFields![0].text! as String
//Useless Stuff to Append items here [...]
//If the item already exists then i call the following function which is inside of an if statement...
self.errorInCreation()
}
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
func errorInCreation(){
let alertController = UIAlertController(title:"Insert a new word", message: nil, preferredStyle: UIAlertController.Style.alert)
alertController.addTextField { (textField : UITextField) -> Void in
textField.placeholder = "The word already exists. Insert a new one"
textField.attributedPlaceholder = NSAttributedString(string: "The word already exists. Insert a new one",attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])
textField.delegate = self
}
let cancelAction = UIAlertAction(title: "cancel", style: UIAlertAction.Style.cancel) { (result : UIAlertAction) -> Void in
}
let okAction = UIAlertAction(title: "save", style: UIAlertAction.Style.default) { (result : UIAlertAction) -> Void in
let newName = alertController.textFields![0].text! as String
//Useless Stuff to Append items here [...]
//If the item already exists then i call the following function which is inside of an if statement...
self.errorInCreation()
}
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
这应该会显示一个新的 alertViewController,直到用户插入一个新词。然而这并没有发生。当我按下保存按钮时,警报关闭。
我试图编辑当前警报,但实际上不可能。 如何清除插入的文本,更改占位符名称并让用户插入新词?
我发现这个人和我有同样的问题,但是这里指出的解决方案没有用。 Presenting new AlertViewController after dismissing the previous AlertViewController - Swift
解决方法其实很简单:不要使用 UIAlertController。它只是一个专门呈现的视图控制器,您无法控制它的外观或行为;特别是,当点击按钮时它会消失,这不是你想要的。因此,只需使用自定义呈现的视图控制器,您就可以在其中获得所需的控件。