2012-02-24 1 views
1

Я разрабатываю интерфейс для приложения iOS, в котором есть как иерархические режимы навигации, так и произвольные режимы переключения на просмотр. Макет любого заданного представления в одном режиме отличается от макета соответствующего представления в другом режиме.Как имитировать метод UINavigationController pushToViewController

Я хочу, чтобы пользователь мог переключаться между этими режимами. Предположим, что изолированное подвью имеет соответствующий подробный вид, который находится в иерархии UINavigationController на 2 уровня. Пользователь должен иметь возможность напрямую переключиться на это подробное представление навигации. Оттуда он должен либо перемещаться вверх, и вниз по иерархии UINavigationController, либо переключиться обратно в изолированное подчинение, из которого он пришел.

UINavigationController имеет метод popToViewController:animated:, который позволит вам пропустить уровни, как вы ориентируетесь назад вверх иерархия, но она не имеет соответствующего pushToViewController:animated:, который позволит вам перейти непосредственно к более низкому уровню в иерархии. Это имеет смысл - навигационный контроллер должен вытолкнуть промежуточный вид/сек в стек, прежде чем отобразит целевое представление. Но регулярные push-методы показывают промежуточный вид/с, который, как я полагаю, вызовет визуальную вспышку, а также требовательную производительность.

Если я моделировать pushToViewController по телефону pushViewController два раза подряд, с animated:NO для промежуточной точки зрения и с точки зрения промежуточного набора временно быть прозрачной, я буду получать разумную производительность? Или, когда запрашивается режим навигации, я должен поместить стек навигационного контроллера за в изолированные виды, выполнить несколько вызовов до pushViewController,, а затем переместить навигационный контроллер на передний план? Или я должен отказаться от использования UINavigationController вообще и выполнить всю навигацию в стиле таблиц вручную с помощью UIView's add/remove/insert/exchangeSubview?

ответ

1

Я считаю, что setViewControllers:animated: поможет вам сделать то, что вы хотите.

Если вы хотите добавить несколько контроллеров представлений в стек и напрямую перейти к последнему, вы можете явно установить весь стек и привязать анимацию UINavigationController непосредственно к последней.

NSMutableArray* controllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]]; 
[controllers addObject:newController1]; 
[controllers addObject:newController2]; 
[self.navigationController setViewControllers:controllers animated:YES]; 

Это будет толкать newController1 и newController2 свой стек просмотра и анимации перехода к newController2.

+0

Спасибо, да, это именно то, что я хочу! Поскольку он был указан в разделе «Доступ к элементам в стеке навигации», я не понимал, что он также может использоваться для отображения отображаемого вида просмотра, несмотря на ключ, предоставленный параметром «анимированный:». Извините, что занял ваше время. – Wienke

+0

Без проблем :) Рад помочь – Aaron

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