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