2017-01-16 5 views
1

Here's an example. У меня есть другие предупреждения с текстовыми полями, а другие - с выборами, но одно с ними - боль.Получить текст из UIPickerview и переместить текстовое поле внутри UIAlert

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) 


} 

Где находится isuue?

ответ

0

Вы должны иметь возможность ссылаться на ваш созданный UITextField позже, когда вы пытаетесь добавить к нему текст, когда вы выбираете строку в UIPicker. Вы, кажется, забывают поместить эту ссылку:

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] в начале вашего закрытия.

+0

В этой функции: FUNC pickerView (_ pickerView: UIPickerView, didSelectRow ряд: Int, inComponent компонент: Int) {// отпечатке заявление работает, но другой код причины аварии gradeTypeTextField.text = gradeType [строка] print ("Testinggggg") self.view.endEditing (true) } – Quintsanity

Смежные вопросы