Так что, если я правильно понимаю, у вас есть контроллер панели вкладок, который включает контроллер навигации в качестве одной из вкладок, контроллер навигации создает контроллер табличного представления в своем методе viewDidLoad и немедленно выдвигает его.
viewDidLoad - это хорошее время для загрузки (что вы и сделали) и плохое время для поведения, например, для продвижения представления.
Вы можете попробовать переместить деталь pushViewController в -viewDidAppear:animated:
. это должно дать вам представление таблицы, но оно все равно будет вести себя немного забавно, потому что у вас будет кнопка «Назад», которая заставит таблицу исчезнуть, а затем сразу же нажать ее снова.
Лучший способ сделать это - установить контроллер табличного представления в качестве корневого контроллера представления навигационного контроллера.
UPDATE:
Похоже, что здесь размыто то, что контроллер должен делать.
Контроллер панели вкладок:
не делите его на подклассы, поместите контроллер вида навигации в качестве одной из вкладок. Я думаю, вы уже правильно поняли эту часть.
Контроллер навигации
Не делайте его на подклассы, инициализируйте его с вашим контроллером табличного представления в качестве корневого контроллера представления. Если вы не пытаетесь заставить контроллер навигации делать что-то совершенно отличное от того, что он обычно делает, редко возникает необходимость в его подклассе.
Контроллер табличного представления
Подкласс этого . Это делает 90% дополнительной работы за вас, все, что вам нужно сделать, это написать реализацию для источника данных и делегировать методы.
Поначалу это может показаться смешным, потому что вам нужно инициализировать их в обратном порядке. Делегат приложения должен запустить контроллер табличного представления, затем инициализировать контроллер навигации с контроллером табличного представления в качестве пользователя root, а затем инициализировать контроллер панели вкладок с контроллером навигации в качестве одной из вкладок. Сначала это сложный стек контроллеров.