Причина, по которой ваш код не работает, заключается в том, что IBAction запускается после нажатия кнопки.Код не может магическим образом читать мысли вашего пользователя и изменять текст непосредственно перед нажатием кнопки.
Создайте свойство с именем 'buttonTitle' или что-то подобное на вашем целевом контроллере представления.Я предпочитаю избегать опций, если я могу, поэтому что-то вроде этого будет то, что вы хотите на VC назначения:
var buttonTitle = ""
Если вы используете переход, то вам нужнопереопределите prepare(for:sender:)
и установите свойство buttonTitle на контроллере представления destination
в segue (для этого вам потребуется привести destination
в качестве подкласса контроллера представления назначения).Примерно как в этом примере (я просто называю класс MyDestinationVC вашего целевого VC. Замените его на правильное имя):
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? MyDestinationVC {
destinationVC.buttonTitle = names[myIndex]
}
}
Или, если вы нажимаете / представляете вручную из кода, то перед тем, как поставитьна экране установите то же свойство buttonTitle
.
Затем в методе viewDidLoad()
контроллера целевого представления установите заголовок кнопки на основе свойства buttonTitle.
override func viewDidLoad() {
super.viewDidLoad()
myButton.setTitle(buttonTitle, for: .normal)
}
Примечание: Другие решения, которые автоматически обновляют для вас кнопку, будут вызывать сбои при вызове до viewDidLoad()
, потому что просмотренные ими представления еще не были инициализированы.