У меня есть UIViewController называется MainVC
содержит UITableViewController называется TableVC
с помощью контейнера, и я пытаюсь получить родительский контроллер вида из TableVC
, используя следующий код внутри себя: let parentVC = self.parent as! MainVC
, но Я получаю fatal error: unexpectedly found nil while unwrapping an Optional value
. Затем я дважды проверял, нет ли self.parent
, как и ожидалось, это так. После этого я использую следующий код внутри MainVC
: self.childViewControllers[0] as! TableVC
, чтобы убедиться, что TableVC
- дочерний вид MainVC
, а код работает просто отлично. Итак, мой вопрос: как я могу получить родительское представление контейнера?Получить Родительское представление контейнерного ViewController
ответ
Я не знаю, в чем причина того, что вам нужна ссылка MainVC, но если вам нужно выполнить некоторую функцию или изменить какое-то значение в MainVC, вы должны использовать делегаты, вы можете найти дополнительную информацию о том, как ее использовать. here
Другой вариант, что вы создаете ссылку в UITableViewController типа MainVC и установить его, когда вы представляете UITableViewController
Причина, по которой мне нужна ссылка MainVC, заключается в том, что у меня есть распознаватель жестов для обнаружения жестов нажатия чтобы убрать клавиатуру при касании вне клавиатуры. и ему понадобятся две цели, одна из них - TableView сама, а другая - MainVC. – AlexBains
.superview
Доступ к любому подклассу UIView
дает вам родительский. Если вы знаете иерархию стека контроллера вашего вида, то .superview
должен помочь вам.
ViewControllers не имеют супервизоров –
Возможно ли, что вы пытаетесь получить родительский View Controller * до того, как * TableVC фактически был добавлен к нему? Где в вашем коде вы вызываете let parentVC = self.parent as! MainVC? – DonMag
@DonMag Это в func ViewDidLoad() – AlexBains
@DonMag Я просто переместил его в func ViewWillAppear(), и он сработал! Большое спасибо! – AlexBains