До настоящего времени Xcode/Swift/iOS.Невозможно обновить встроенный дочерний VC от не-родителя VC
У меня есть Master VC (называемый StartVC), который содержит дочерний VC (называемый TopBarVC) через и встроенный segue. Child VC содержит кнопку, которая при нажатии, модально переходит к третьему VC (называемому CategoryPickerOverlayVC) (вид в этом VC служит в качестве раскрывающегося списка для выбора категории).
@IBAction func CategoryFilterButtonPressed(_ sender: Any) {
performSegue(withIdentifier: "toCategoryPickerOverlay", sender: self)
}
При выборе опции из выпадающего списка, который сам по себе состоит из трех кнопок, название выбранной кнопки должны быть использованы для замены текста заголовка кнопки в ребенка ВК.
В Master VC я использую prepareforsegue для хранения ссылки на Child VC в переменной - «topBarReference» - в момент, когда происходит встраивание segue.
var topBarReference: TopBarVC?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "TopBarPane"{
topBarReference = segue.destination as? TopBarVC
}
}
Затем, в 3-й ВК, когда я нажимаю на одном из вариантов кнопки в раскрывающемся списке, название кнопки отправляется через prepareforsegue обновить кнопку в детской VC (через «topBarReference») ,
if segue.identifier == "unwindToStartVC"{
let vc = segue.destination as! StartVC
vc.topBarReference?.filterButtonText = ((sender as! UIButton).titleLabel?.text)!
}
3-й VC затем разматывается назад к главному VC. Я должен добавить, что когда кнопка в Child VC изменена, переменная (filterButtonText) в Child VC сначала устанавливается с текстом заголовка, а затем эта переменная используется для установки текста заголовка кнопки с помощью метода viewDidAppear Child VC.
При использовании отладчика я также отмечаю, что viewDidAppear в Master VC, похоже, не выполняется после разматывания (я установил диагностическую команду print-to-console в viewDidAppear и после распечатки ничего не печатает). Я понимаю, что это объясняет, что кнопка не обновляется, но я понятия не имею, почему viewDidAppear не запускается.
Я также пробовал использовать делегатский протокол и instantiateViewController (withString :) безрезультатно. Все методы дают тот же результат, что и кнопка в Child VC не обновляется. Ошибок нет. Все остальное происходит так, как ожидалось.
Любые идеи относительно того, что я делаю неправильно?
если они оба встроены в StartVC, то есть StartVC все еще отображается, а затем просмотр отображался не будет вызван. Попробуйте использовать оповещения. Сделайте свой startVC для прослушивания определенного уведомления и отправьте его, когда вы разматываете/выбираете опцию из раскрывающегося списка. Внутри вашего кода обработчика уведомлений обновите заголовок кнопки –
Третий VC - отдельный VC, а не встроенный. – Rossco
«Я понятия не имею, почему viewDidAppear не запускается». Потому что он никогда не исчезал. Я думаю, что это и сказал @ShawnFrank. – matt