#ios #swift #uiviewcontroller #swift3
#iOS #swift #uiviewcontroller #swift3
Вопрос:
В настоящее время я работаю над своим приложением, чтобы изучить swift (я совершенно новый). И я наткнулся на ошибку, которую, похоже, я просто не могу разрешить. У меня есть два представления в моей раскадровке с двумя viewcontrollers, следовательно, ViewController amp; Settings.
В представлении «Настройки» у меня есть textfield
, а в представлении «ViewController» у меня есть метка.
Я хочу передать текст из текстового поля в «настройках» на мою метку в «viewcontroller»
В настоящее время я получаю следующую ошибку:
значение типа ‘UIViewController’ не имеет члена ‘ViewController’
Мой код выглядит примерно так для поля ввода:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var secondVC: ViewController = segue.destination.ViewController as ViewController
secondVC.receivedString = textField.text!
}
для метки:
class ViewController: UIViewController {
@IBOutlet var city: UILabel!
var receivedString: String = ""
override func viewDidLoad() {
super.viewDidLoad()
label.text = receivedString
}
«label.text» также дает мне неразрешенный идентификатор..
Ответ №1:
Чтобы получить назначение viewController
в Swift 3, его просто segue.destination
нет segue.destination.ViewController
.
var secondVC = segue.destination as! ViewController
Для второй ошибки у вас есть объявление UILabel
с именем city
не label
так, как должно быть city.text = receivedString
Комментарии:
1. хм, это действительно устранило ошибку, если я решу сказать: переопределить функцию подготовки (для перехода: UIStoryboardSegue, отправитель: есть?) { пусть secondVC = segue . назначение как! ViewController secondVC.label = TextField.text!
2. Я думаю, это то, что я сделал? Разве это не лучшая практика для этого?
3. @JeppeC В вашем вопросе вы передаете строку с объектом
receivedString
и присваиваете текст метки городаviewDidLoad
, что является правильным способом передачи данных, потому что вprepare(for:sender:)
UILabel объект еще не инициализирован.4. Добро пожаловать, приятель 🙂
5. Да, и, кстати! Просто для логики этого, теперь, когда я сделал переход, смогу ли я тогда просто передать больше объектов, не записывая всю функцию снова? 🙂