2016-04-19 3 views
0

Я создаю контроллер из раскадровки с таблицей в ней.Когда будут добавлены subviews в супер-просмотр из раскадровки?

После того, как я скомпилирую и запустил его, будет показан tableView, но когда я буду использовать self.view.subviews, чтобы получить его subviews в методе viewDidLoad, я не могу найти tableView.

Кроме того, я пытаюсь выполнить метод [self.tableView removeFromSuperview] в viewDidLoad, но tableView по-прежнему будет отображаться последним.

Кажется, что когда viewDidLoad выполнил, tableView еще не добавил супер-представление. Тем не менее, в другом контроллере, созданном раскадрой, я могу получить tableView, используя self.view.subviews в viewDidLoad ...

Мне интересно, что к чему приведет, и когда будет добавлен tableView.

+0

Когда я использую self.view.subviews в viewDidAppear, оба контроллера возвращают мне tableView, но почему бы не в viewDidLoad? – wkx

+1

Вы вызываете супер в свой viewDidLoad перед проверкой статуса tableView? –

+0

Привет, вы подключились в IB vc class? Проверьте Pls, если вы сделали это правильно. –

ответ

0

Игнорировать мой комментарий, я не думаю, что вызов супер - это ответ (хотя это, как правило, хорошая практика).

Документация нечеткая, но единственное, на что вы можете положиться в viewDidLoad, - это то, что само изображение загрузилось, а не какое-либо из его подзонов, которое, как вы обнаружили, может быть или не быть.

Если вам нужно получить доступ к дополнительным представлениям, они гарантированно будут присутствовать в представлении ViewDidLayoutSubviews, как описано в this SO answer, но имейте в виду, что это будет вызвано всякий раз, когда будут выделены подвыборы, которые будут выполняться несколько раз в типичном приложении (например, он также вызывается, когда пользователь поворачивает свое устройство).

Если вам действительно нужно получить доступ к суб-представлению, как только оно будет загружено, вы можете подклассифицировать его и переопределить свой собственный метод viewDidLoad.

Смежные вопросы