Раскадровка iOS5 добавляет правую кнопку на панель навигации

Поэтому я начал экспериментировать с раскадровкой.

поэтому моя раскадровка выглядит следующим образом

nav controller -> tableviewcontroller -> tabBarController -> tableViewController как элемент панели вкладок (купить, связав их через переход отношений)

Последний tableviewcontroller действительно появляется с панелью навигации сверху, но я не могу добавить на нее элемент кнопки панели. даже код self.navigationItem.rightBarButtonItem = self.editButtonItem не делает его видимым.

Дело в том, что с первым tableviewcontroller он работает (работает код и дизайнер). Я подозреваю, что это должно было что-то сделать с первым навигационным контроллером.

Я пробовал встроенный в навигационный контроллер в tableviewcontroller, но это просто обувь для 2 навигационных панелей.

Любая помощь приветствуется

Спасибо,

РЕДАКТИРОВАТЬ: добавить скриншот раскадровки

раскадровка


person pdiddy    schedule 05.03.2012    source источник


Ответы (1)


Исходя из моего собственного опыта, вы обычно используете эту последовательность:

tabBarController -> navController -> tableViewController

Другими словами, контроллер панели вкладок с элементом панели вкладок, содержащим контроллер навигации, который, в свою очередь, содержит таблицу. Если это не то решение, которое вы ищете, или кнопка не отображается, не могли бы вы включить снимок своей раскадровки?


ОБНОВЛЕНО: если вы пытаетесь сделать панель вкладок динамической, вам необходимо изменить массив, который использует tabBarController.viewControllers. Как упоминалось в комментариях, это не лучший подход, если вы следуете рекомендациям по интерфейсу, но вот как я заставил его работать:

//Initial tab bar items
self.tabBarController.viewControllers =
[NSMutableArray arrayWithObjects:originalItem1, originalItem2, nil];

//Now let's replace the old items with some new ones!
self.tabBarController.viewControllers = 
[NSMutableArray arrayWithObjects: replacementItem1, replacementItem2, replacementItem3, nil];

Как видите, изначально мы установили панель вкладок так, чтобы она содержала два элемента панели вкладок (originalItem1 и 2). Затем следующий фрагмент кода заменяет эти элементы новыми (replacementItem1, 2 и 3). Поскольку кажется, что вы пытаетесь изменить вкладку на основе представления, в котором в данный момент находится приложение, вы, вероятно, захотите включить это в метод viewWillLoad. Это означает, что панель вкладок должна обновляться по мере загрузки представления. Конечно, вам нужно будет установить некоторые условия почти в каждом представлении, чтобы панель вкладок постоянно менялась на ту, которую вы хотите.

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

person Squatch    schedule 07.03.2012
comment
Мне нужно начать со списка таблиц без. Вот почему я не начинаю раскадровку с табуляции. Только когда пользователь нажимает на элемент в списке, он показывает детали, которые являются моим tabbarcontroller с двумя элементами вкладок .... я получу снимок экрана раскадровки - person pdiddy; 07.03.2012
comment
Хорошо, я думаю, понять, что вы имеете в виду. Я так понимаю, вы хотите иметь динамическую панель вкладок? Глядя на это сейчас. Пока вы ждете, вы можете прочитать это. Похоже, что iOS HIG предлагает избегать этого. - person Squatch; 07.03.2012
comment
Это не совсем динамическая панель вкладок. Представление, содержащее TabBar, имеет 2 табуляции. Каждый элемент является tableviewcontroller. Я хотел добавить кнопку на панель навигации для первой вкладки, но не могу заставить ее работать. Спасибо за попытку найти решение. - person pdiddy; 07.03.2012
comment
Спасибо за HIG .... так что это будет плохой интерфейс ..? Мне кажется, все в порядке ... при нажатии на элемент вы можете увидеть детали, которые разделены на 2 вкладки .... - person pdiddy; 07.03.2012
comment
Я вижу, как это имеет смысл, но это может быстро выйти из-под контроля, если у вас больше нескольких панелей вкладок. Панели вкладок обеспечивают простой способ сообщить пользователю, где он находится в приложении. В то время как навигационные контроллеры делают это в определенной степени, панели вкладок делают это лучше. Помните, что приложения используются в течение очень коротких промежутков времени и не должны быть слишком сложными (KISS — Keep It Simple and Stupid). В любом случае, я не оставил тебя в покое! Обновил ответ выше. - person Squatch; 07.03.2012
comment
И я только что увидел ваш комментарий о том, что это не динамическая панель вкладок... Извините за это. Похоже, я решил не ту задачу! Мне нужно немного поспать, но я могу проверить это завтра во время простоя на работе, если это не будет решено к тому времени. Хотя, скорее всего, это проблема с навигационным контроллером. Прости меня, что я не понял этого раньше. - person Squatch; 07.03.2012
comment
Спасибо за помощь. На самом деле я думаю, что вы неправильно поняли, чего я пытался достичь. В основном раскадровка показывает табличное представление. Затем, когда пользователь касается элемента. Пользователь попадает в этот пользовательский интерфейс TabBar с двумя элементами вкладки. Динамических вкладок нет, я не пытаюсь добавить новую вкладку или заменить их. 2 вкладки в моей раскадровке будут показаны. Единственная проблема, с которой я столкнулся, заключалась в том, чтобы выяснить, как добавить правую кнопку на панель навигации, когда отображается TabBar. Но эй, спасибо за HIG, я думаю отказаться от этого пользовательского интерфейса и вместо этого использовать сегментированное управление ... что-то похожее на iCal - person pdiddy; 07.03.2012
comment
Без проблем. Извините, я неправильно понял проблему. По крайней мере, кажется, что вы нашли решение. Я думаю, что вы идете в правильном направлении с сегментированными элементами управления. Удачи вам. - person Squatch; 07.03.2012