如何编辑 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”

解析中的 AlertViewController

markdown alertviewcontroller

自定义 AlertViewController 未在横向中正确显示

如何查找选定集合视图单元格的索引路径?

在具有透明背景的 Alert ViewController 中心添加图像