【问题标题】:Get text from UIPickerview and move Textfield inside UIAlert从 UIPickerview 获取文本并在 UIAlert 中移动 Textfield
【发布时间】:2017-01-17 08:47:20
【问题描述】:

Here's an example。我有其他带有文本字段的警报和其他带有选择器视图的警报,但是两者都做一个很痛苦。

let gradeTypeTextField = gradeTypeTextField (Doesn't work)

var gradeTypeTextField: UITextField!

@IBAction func newGrade(_ sender: AnyObject) {
 When button is tapped, show alert.
    alertForGrade()
}

var gradeType = ["Attendance", "Assignment", "Homework Assignment", "Quiz", "Test", "Mid-Term", "Exam", "Other"]


override func viewDidLoad() {
    super.viewDidLoad()

     Hide extra cells
    tableView.tableFooterView = UIView()

}


func alertForGrade() {

     Create the alert controller.
 alert = UIAlertController(title: "New Grade", message: nil, preferredStyle: .alert);


    Add the text field. You can configure it however you need.
    alert?.addTextField(configurationHandler: { (gradeTypeTextField) -> Void in

        gradeTypeTextField.placeholder = "Type of Grade."

        let pickerView = UIPickerView()
        pickerView.delegate = self
        pickerView.dataSource = self
        pickerView.backgroundColor = UIColor.white
        pickerView.showsSelectionIndicator = true
        gradeTypeTextField.inputView = pickerView
        self.view.endEditing(true)

    })

    alert?.addTextField(configurationHandler: { (assignmentTextField) -> Void in
        assignmentTextField.placeholder = "Name of the assignment."

    })

    alert?.addTextField(configurationHandler: { (gradeTextField) -> Void in gradeTextField.placeholder = "Grade for the assignment."

        Grab the value from the text field, and print it when the user clicks OK.
        let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in
            let assignmenttextField = (self.alert?.textFields![0])! as UITextField

            let gradeTextField = (self.alert?.textFields![1])! as UITextField
            let assignment = assignmenttextField.text!

            let gradeString = gradeTextField.text!

            let grade = Int(gradeString)

            self.dictionaryForGradebook.updateValue(grade!, forKey: assignment)

            print(self.dictionaryForGradebook)

            self.tableView.reloadData()
        })


        self.alert?.addAction(ok)
        self.alert?.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { (action) -> Void in


        }))

        // 4. Present the alert.
        self.present(self.alert!, animated: true, completion: nil)


    })


}


func numberOfComponents(in pickerView: UIPickerView) -> Int {

    return 1
}

 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    return gradeType.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    return gradeType[row]
}


func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

This prints but if I try " yearTextField.text = years[row]" it crashes.
           print("Testinggggg") 

    self.view.endEditing(true)


}

问题在哪里?

【问题讨论】:

    标签: ios swift uitextfield


    【解决方案1】:

    当您在UIPicker 中选择一行时尝试向其添加文本时,您需要能够引用您创建的UITextField。您似乎忘记放置该链接:

    alert?.addTextField(configurationHandler: { (gradeTypeTextField) -> Void in
    
        // Append this: 
        self.gradeTypeTextField = gradeTypeTextField
    
        gradeTypeTextField.placeholder = "Type of Grade."
    
        let pickerView = UIPickerView()
        pickerView.delegate = self
        pickerView.dataSource = self
        pickerView.backgroundColor = UIColor.white
        pickerView.showsSelectionIndicator = true
        gradeTypeTextField.inputView = pickerView
        self.view.endEditing(true)
    
    })
    

    然而,这将创建一个保留循环,因此建议通过在关闭的开头添加 [weak self] 来创建一个无主/弱自链接。

    【讨论】:

    • 在这个函数中: func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { // 打印语句有效,但其他代码导致崩溃gradeTypeTextField.text =gradeType[行] print("Testinggggg") self.view.endEditing(true) }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多