首页 > 解决方案 > 如何引用 UIAlert 文本字段 - Swift

问题描述

我有一个警报,它在文本字段中有一个日期选择器。我想将此文本字段引用到 objc 以添加属性,我将如何做到这一点?我尝试使用以下方法,但它不适用于错误“警报不在范围内”。

警报

@IBAction func info(_ sender: Any) {
        
        let alert9 = UIAlertController (title: "Add Your Info", message: nil, preferredStyle: UIAlertController.Style.alert)

        let cancel9 = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel, handler: nil)

        alert9.addAction(cancel9)
        
        alert9.addTextField { (textfieldDate: UITextField) in

            textfieldDate.placeholder = "Date"
            
            self.datePickerWeight = UIDatePicker()
            self.datePickerWeight!.preferredDatePickerStyle = .wheels
            self.datePickerWeight?.datePickerMode = .date
            self.datePickerWeight?.addTarget(self, action: #selector(ViewController.dateChangedInfo(datePicker:)), for: .valueChanged)
            
            textfieldDate.inputView = self.datePickerInfo
            
            let dateFormatterWeight = DateFormatter()

            dateFormatterInfo.dateFormat = "EEEE, MMM d, yyyy"

            let todayDateInfo = dateFormatterInfo.string(from: Date.init())
            
            textfieldDate.text = todayDateInfo

        }
        
        alert9.addTextField { (textfieldAddInfo: UITextField) in

            textfieldAddInfo.placeholder = "Info"
            textfieldAddInfo.keyboardType = .decimalPad

        }

        let ok9 = UIAlertAction(title: "Save", style: UIAlertAction.Style.default) { (action: UIAlertAction) in print("OK")

            let textfieldDate = alert9.textFields![0]
            let textfieldAddInfo = alert9.textFields![1]
}

dateChangedInfo 对象

    
    @objc func dateChangedInfo(datePicker: UIDatePicker) {

        let dateFormatter = DateFormatter()

        dateFormatter.dateFormat = "EEEE, MMM d, yyyy"

        let stringDate = dateFormatter.string(from: datePicker.date)

        let textfieldDate = alert9.textFields?[0] // Cannot find 'alert9' in scope
        
        self.textfieldDate.text = stringDate

        self.fetchData(for: stringDate)

    }

标签: swiftobjective-c

解决方案


使 alert9 成为实例变量。

var alert9: UIAlertController?

@IBAction func info(_ sender: Any) {
   alert9 = UIAlertController (title: "Add Your Info", message: nil, preferredStyle: UIAlertController.Style.alert)
   ...
}

推荐阅读