Правильный способ настройки UISegmentedControll на UINavigationController UINavigationBar внутри UITabBarController

Название в значительной степени описывает все это.

Проблема заключается в обработке обратных вызовов UISegmentedControll (нажатия кнопок). Если бы тип содержимого всех вложенных представлений был одинаковым (например, некоторые UITableViewControllers), я мог бы просто переключить источники данных и перезагрузить таблицы.

Однако это не так, у меня есть 3 очень разных представления, которые позволяют дальнейшую детализацию / взаимодействие на основе NavigationControllers.

Таким образом, я настроил этот ATM так, что есть класс «контейнер», в который я помещаю все UINavigationController. Все они используют один и тот же UISegmentedController, и я перенаправляю обратные вызовы контроллеру представления контейнера. Это совсем не так хорошо.

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

Вот картина того, чего я хочу достичь:

альтернативный текст


person Kaspa    schedule 21.01.2010    source источник


Ответы (2)


В одном из моих приложений у меня есть единое табличное представление, которое заполняется данными трех отдельных NSMutableArrays. Я условно устанавливаю содержимое ячейки в cellForRowAtIndexPath и условно получаю 3 разных -счета в numberOfRowsInSection. Хотя это не совсем то, что вы ищете, вам не нужно иметь 3 разных источника данных, как указано в вашем первоначальном примере.

Ваши инстинкты верны. Это кажется слишком сложным.

Как насчет того, чтобы использовать один NavigationController и просто поменять местами addSubview / removeFromSuperview на NavigationController.view?

person David Sowsy    schedule 22.01.2010
comment
Как насчет нажатия на значок TabBar, который появляется на корневом контроллере (это пустое представление). Есть ли какое-нибудь разумное решение для этого? Я попробую поменять местами, о которых вы сказали. Ваше здоровье - person Kaspa; 22.01.2010

Я столкнулся с аналогичным требованием к функции в недавнем приложении для iPad, решение, которое я использовал, находится по следующей ссылке - по сути, я реализовал «управляющий» контроллер представления, который добавляет / удаляет подпредставления на основе выбранного индекса сегментированного элемента управления. , с правильной обработкой событий.

Я решил проблему с контроллером навигации, передав «управляющий» контроллер представления в контроллеры представления subview в качестве параметра и заставив эти контроллеры перезвонить родительскому элементу для отправки в стек навигации.

Что мне особенно нравится в этом решении, так это то, что оно позволяет мне хранить код для соответствующего представления каждого сегмента отдельно, а не путать его в одном перегруженном контроллере представления.

Подробности здесь: Передовой опыт UISegmentedControl

Хороший вопрос, приятель, надеюсь, что это поможет.

person crafterm    schedule 24.05.2010