如何编辑 alertViewController 而不根据操作将其关闭
Posted
技术标签:
【中文标题】如何编辑 alertViewController 而不根据操作将其关闭【英文标题】:How to edit alertViewController without dismissing it accordingly to the action 【发布时间】:2020-12-11 15:05:40 【问题描述】:我的应用中有一个警报,我在其中放置了一个文本字段。用户可以使用它在数组中添加一些值。但是我希望所有的值都不同。因此,如果用户插入现有值,我希望清除文本字段并显示不同的占位符文本,告诉用户插入新值。
这就是我现在正在做的事情:
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
【问题讨论】:
【参考方案1】:解决方案其实很简单:不要使用 UIAlertController。它只是一个专门呈现的视图控制器,您无法控制它的外观或行为方式;特别是,当点击按钮时它会关闭,这不是您想要的。因此,只需使用自定义呈现的视图控制器,您就可以在其中拥有所需的控制。
【讨论】:
以上是关于如何编辑 alertViewController 而不根据操作将其关闭的主要内容,如果未能解决你的问题,请参考以下文章
未调用 alertviewcontroller 中的 tableview 的“cellForRowAtIndexPath”