#ios #swift #xcode #uitextfield #segue
#iOS #swift #xcode #uitextfield #segue
Вопрос:
У меня есть переход типа show. Я хочу, nameTextField
чтобы destinationViewController содержал в нем некоторый текст при выполнении перехода. Я пытался делать:
override func prepare (for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ToEditScreen" {
let svc = segue.destination as! EditViewController
svc.nameTextField.text = cars[selectedIndex!].name //crashes
svc.nameString = cars[selectedIndex!].name
}
}
Ошибка, которую я получаю: неожиданно найдено nil при неявном развертывании необязательного значения.
Я знаю, что cars[selectedIndex!].name
это не ноль.
Если я удалю строку текстового поля, все будет в порядке и nameString
получит свое значение, равное cars[selectedIndex!].name
. Я знаю, что могу сделать:
nameTextField.text = randomString
но это похоже на дополнительный шаг. Могу ли я заполнить текстовое поле.текст из оригинала ViewController
?
Комментарии:
1. На данный момент представление не загружено. Вам нужно переопределить
viewDidLoad
метод в вашемEditViewController
и заполнить текстовое поле. Также есть неприятный способ, вызватьsvc.loadViewIfNeeded()
сразу послеlet svc = segue.destination....
2. Почему это неприятно?
Ответ №1:
Вы можете добавить строковую переменную в целевой vc и установить ее там или
let svc = segue.destination as! EditViewController
svc.loadViewIfNeeded() // add this line
svc.nameTextField.text = cars[selectedIndex!].name