【问题标题】:Can't add a textfield in AlertController无法在 AlertController 中添加文本字段
【发布时间】:2018-01-17 01:35:16
【问题描述】:
var textFD = UITextField.init()
var tempStr : String!
var datax = [Tasks]()
var tempArr = [NSManagedObject]()
override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: "Add", style: UIBarButtonItemStyle.plain, target: self, action:#selector(myTableViewController.addFunc))
    print("Hello")
     fetchData()
}
 func addFunc(){
    let alertO = UIAlertController.init(title: "Add", message: "Add what you want", preferredStyle: .alert)
    let saveAct=UIAlertAction.init(title: "Save", style: .default, handler:saveHandler)
    let cancelAct=UIAlertAction.init(title: "Cancel", style: .default, handler: nil)
    alertO.addAction(saveAct)
    alertO.addAction(cancelAct)
    alertO.addTextField(configurationHandler: { (textFD) in

        textFD.placeholder="Hey therer"

        print("textfd text1 is \n\n\n" ,textFD.text!)
        self.tempStr=textFD.text!
    })
    print("textfd text2 is \n\n\n",textFD.text! )
    self.present(alertO, animated: true, completion: nil)
    self.tableView.reloadData()
    self.tempStr=textFD.text!

}
func saveHandler(alert:UIAlertAction){
    print("textfd text3 is \n\n\n",textFD.text! )
    print("Value of tempStr \n\n ",tempStr)
    let taskX = Tasks(context: context)
    taskX.mydata = tempStr
    appDelegate.saveContext()
    self.tableView.reloadData()
    print("Value of tempStr \n\n ",tempStr)

}

当我点击按钮时 addFunc 将调用警报并从警报控制器上的文本字段中调用,稍后文本字段的文本存储在字符串中。

Alertcontroller,出现警报和文本字段占位符的文本字段,但是当我尝试将文本字段文本存储到字符串中时( tempStr ) 无法存储!

【问题讨论】:

  • 在 viewDidLoad 中首先分配字符串变量。 self.tempStr=""

标签: ios iphone swift3 uitextfield uialertcontroller


【解决方案1】:

该类的textFD 属性不是alertO 上显示的属性,textField 的configurationHandler 只是提供了一个闭包来帮助用户自定义UIAlertController 上的textField。

要在 UIAlertController 上获取 textField 的文本,首先你需要使用 UIAlertController 实例的属性textFields 来获取你想要的 textFiled,然后使用 .text 来获取这个 textFiled 的文本。

【讨论】:

    【解决方案2】:
    alertO.addTextField(configurationHandler: { (textFD) in
    
        textFD.placeholder="Hey therer"
    
        print("textfd text1 is \n\n\n" ,textFD.text!)
        self.tempStr=textFD.text!
    })
    

    textfield 正在初始化,没有文本(默认为空白), tempStr 正在存储一个空白值。您必须在保存操作时保存字符串。

          let saveAct = UIAlertAction.init(title: "Save", style: .default, handler:{
                alertAction in
                let textField = alertO.textFields![0] as UITextField
                self.tempStr = textField.text
         })
    

    【讨论】:

    • @Paris0 你能描述一下错误吗,因为我在发帖之前已经成功实现了
    【解决方案3】:

    试试这个

    编辑

    func addFunc(){
        let alert = UIAlertController(title: "MESSAGE".localized, message: "ENTER_YOUR_MESSAGE".localized, preferredStyle: .alert)
    
                alert.addTextField { (textField) in
                    // textField.placeholder = "Enter your message".localized
                }
    
                alert.addAction(UIAlertAction(title: "TITLE".localized, style: .default, handler: { (action:UIAlertAction!) in
                    let textField = alert.textFields![0] // Force unwrapping because we know it exists.
                    //print("Text field: \(String(describing: textField?.text))")
    
                    if (textField.text?.characters.count)! > 0
                    {
                        self.tempStr = textField.text
    
                    }
                    else
                    {
                        print("empty text")
                    }
                }))
                self.present(alert, animated: true, completion: nil)
    }
    

    【讨论】:

    • 我试过了,但我无法存储 textFD.text!在 self.tempStr @Kamlesh Shingarakhiya
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2018-10-27
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多