2013-10-26 4 views
5

У меня есть следующая настройка в моем приложении: Мой контроллер начального представления - это UITabBarController. вкладки:Использование нескольких копий одного и того же контроллера представления в раскадровке

1) UINavigationController-> PostListVC
2) UINavigationController-> CategoriesListVC
3) UINavigationController-> PostListVC
4) UINavigationController-> PostListVC
5) UINavigationController-> MoreViewController

Как вы можете видеть, 3 вкладки содержат один и тот же класс viewController, но не должны содержать один и тот же объект контроллера представления. В представлении будет отображаться различная информация на основе информации, полученной им из AppDelegate.

Что я сделал, я создал 5 UINavigationControllers, связал их с uitabbarcontroller, а затем создал rootViewController для 3 из них в том же PostListVC View - таким образом мне не нужно поддерживать 3 проекта одного и того же вида.

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

Я попытался проиллюстрировать то, как я провод-вверх раскадровку с использованием 3 вкладок примера: enter image description here
Как вы можете видеть, как верхний и нижние наиболее-большинство просмотров подключены к PostListVC.

Я не знаю, в чем проблема. Я предполагаю, что неправильно использую раскадровки.

Кто-нибудь знает, как я могу это исправить?

Спасибо!

EDIT: Я создал простой, пример проекта (Xcode 5), что illustartes этот вопрос:

http://www.speedyshare.com/Srwfg/TabBarProblem.zip

EDIT 2: модифицированная версия примера, показывая проблема с предлагаемым решением: http://speedy.sh/JkdGC/TabBarProblem-2.zip

Невозможно создать различные tabBarItems с помощью этого метод, и нет никакого способа разместить barItems, чтобы они не были в строке - даже если вы попытаетесь настроить порядок segues.

+0

Недостаточно информации здесь для кого-то, чтобы помочь, но ничего на изображении не указывает на ошибку. Я предлагаю добавить некоторые 'NSLog' каждому контроллеру View (вероятно, 'viewDidLoad'), чтобы удостовериться, что правильная информация передана и что создается экземпляр правильного класса UIViewController. Обратите внимание, что каждый из них должен быть уникальным. Это единственный способ отладить что-то такое сложное. –

+0

Оба вида viewDidLoad и loadView вызываются только один раз. PostListVC, вероятно, не создается корректно, но я не знаю почему. – Niv

+0

Несколько вещей для проверки: правильно ли установлен класс внутри IB? Что говорит '' NSLog's '' в PostListVC? Является ли соединение, связанное в IB? Не уверен, что смогу помочь за эти вопросы. –

ответ

0

Как вы сказали, вам нужны три разных экземпляра PostListVC, тогда вы должны создать три разных контроллера вида типа PostListVC и соединить каждую вкладку со своей собственной. Класс тот же, но каждая вкладка получает свой собственный экземпляр.

+4

Есть ли способ сделать все 3-е место одним и тем же xib? В настоящее время я держу весь дизайн внутри раскадровки – Niv

0

У меня есть ваша программа для работы, но я не знаю, будет ли решение работать для вашего полного проекта. Будем надеяться, что он вернет вас на правильный путь.

Решение состоит в том, чтобы иметь ОДИН (1) навигационный контроллер/встроенный корневой вид, но TWO (2) от контроллера панели вкладок.Вот картинка:

enter image description here

Похоже, что есть проблема с несколькими UINavigationController s связь с тем же UIViewController. Но никаких проблем с тем же UINavigationController, связанным с тем же UIViewController при условии, что они создаются отдельно через UITabBarController.

+2

. Я тоже получил это решение: 1) Используя этот способ, вы не можете создавать разные tabBarItems для разных видов (например, если у вас разные изображения для кнопок) , 2) Он объединяется с баром. Вы не можете добавить другой tabBarItem между двумя этими ссылками на один и тот же viewController. (Пример этой проблемы добавлен в EDIT 2) – Niv

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