Я искал ответ здесь, но не смог найти точно такую же проблему, как у меня, пожалуйста, помогите мне разобраться.
Проблема в том, что когда я создаю отдельный вид и пытаюсь создать переход с использованием раскадровки и контроллера представления навигации, сам переход работает нормально, но
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
не вызывается.Чтобы сделать мой пример минимальным, я сделал игрушечное приложение, чтобы показать, что происходит.
Так выглядит общая схема раскадровки. ViewController встроен в NavigationController .
Работа выполняется с помощью Ctrl + SecondViewController, идентификатор установлен .
Пользовательский класс для SecondViewController установлен .
Контроллеры представления имеют следующую реализацию:
Контроллер основного вида устанавливает заголовоктолько кнопка:
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
button.setTitle("Awesome title", for: .normal)
}
}
При нажатии кнопки метка должна обновляться с заголовка кнопки:
class SecondViewController: UIViewController {
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
print("SecondViewController viewDidLoad method")
}
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print(print("SecondViewController prepare method"))
if let text = (sender as? UIButton)?.titleLabel?.text {
label.text = text
}
}
}
Я намеренно поместил два оператора печати, чтобы показать, что viewDidLoad
действительно получаетназывается, но не prepare
.
Вот рисунок, показывающий, как работает приложение. Как вы можете видеть, ярлык на втором экране также не обновляется.
Я также пытался установить segue таким образом , затем создать @IBAction
функцию и вручную вызвать performSegue
:
@IBAction func onButton(_ sender: UIButton) {
performSegue(withIdentifier: "Id", sender: self)
}
Пожалуйста, помогите мнепонять и решить проблему.Спасибо.