#ios #objective-c #uiviewcontroller #uisegmentedcontrol
#iOS #objective-c #uiviewcontroller #uisegmentedcontrol
Вопрос:
Правильно, я рассмотрел несколько вопросов SO по этому вопросу, и мне трудно найти правильное решение здесь.
Требования
У меня есть приложение на основе UITabBar. На одной из вкладок вверху находится UINavigation
контроллер с UISegmentedControl
, позволяющий пользователю переключаться между тремя различными представлениями. У каждого представления будет UITableView, который позволит пользователю перейти к другому представлению. Эти представления должны быть перенесены на контроллер навигации.
Проблема
Теперь все вопросы и ответы SO по этой теме показывают, как переключаться между представлениями. Однако мне нужно представление, на которое я переключаюсь, чтобы разрешить добавление другого представления в стек навигации. Я не уверен, что это вообще возможно. Я думал о сдерживании UIViewController — однако это показало бы, что представление помещается в стек в меньшем окне, чем границы экрана. Не то, что я ищу.
Есть идеи, как я могу решить это с помощью раскадровок и UIViewControllers?
Обновить
Вот что я пытаюсь сделать: на скриншоте область контейнера — это то, куда мне нужно загрузить другие контроллеры просмотра. Элемент управления UISegment не может перейти на панель навигации, поскольку это пространство используется для чего-то другого. Так вот почему я думаю, что сдерживание UIViewController может быть здесь лучше?
Комментарии:
1. Вы должны просто иметь возможность использовать pushViewController на свой
UINavigationController
для создания стека навигации при нажатии на одну из кнопок UISegmentedControl. Это не работает?2. Спасибо за помощь. Нажимная часть — это не то, где я застрял. Смотрите обновление в моем вопросе. 🙂 Я уверен, что push сработает, как только я туда доберусь.
3. О, интересно — так вам нужен навигационный стек в этой серой области, аналогичный функциональности UIWebView?
4. @LyricalPanda Не совсем. Серая область должна отображать три разных UIViewControllers. (Пользовательский элемент управления имеет два сегмента — только для демонстрационных целей) — выбор любого из этих сегментов приведет к замене представления в серой области на другой контроллер представления. (Это первый бит, на котором я застрял) второй бит, о котором я беспокоился, заключался в том, чтобы поместить новый контроллер представления в стек, когда пользователь нажимает на ячейку UITableView в серой области. Я хочу, чтобы новый контроллер просмотра был полноэкранным и не изменял размер (но пока я пытаюсь решить свою первую проблему) — надеюсь, это прояснит ее?
5. Да! Извините, мне потребовалось так много времени, чтобы понять проблему. Ваша логика для каждого из представлений кардинально отличается? Даже если вы ищете решение с использованием UIViewControllers, я знаю, что это можно решить, создав пользовательские UIViewControllers, которые скрыты по умолчанию, и показывая их при выборе кнопки. Это может быть один из подходов, если у вас нет полностью отдельной логики для каждого из них.
Ответ №1:
Таким образом, даже если при этом не используется separate TableViewControllers
, вы можете использовать разные пользовательские UIViews
настройки, которые скрыты по умолчанию и становятся видимыми при выборе соответствующей кнопки. К сожалению, это приведет к тому, что у вас будет логика всех трех представлений в одном и том же VC.
Чтобы обойти это, вы можете попробовать настроить некоторые делегаты и имитировать TableViewController
логическое разделение, отправив didSelectTableAtIndexPath
, UIGesture
штрихи и т.д. В классы за пределами ViewController
, чтобы помочь сохранить ваш код более чистым.
Комментарии:
1. Поскольку большая часть логики для всех трех представлений — это просто табличные представления, код не будет слишком запутанным. Спасибо за отличное предложение.
Ответ №2:
Пользователь UITabBarController
и скрыть панель вкладок.
- (void)viewDidLoad
{
self.tabBar.hidden = YES;
}
Привязка элемента управления сегментом к методу valueChanged
- (void)valueChanged:(UISegmentedControl *)seg
{
if ([seg.selectedSegmentIndex == 0]) {
self.selectedIndex = 0;
} else if ([seg.selectedSegmentIndex == 1] {
self.selectedIndex = 1;
}
}
Я достигаю этого таким образом, я надеюсь, что это поможет.
Комментарии:
1. Это не то, что мне нужно. Панель UITabBar должна оставаться видимой. Хотя спасибо за помощь.