Как / нужно ли имитировать метод pushToViewController UINavigationController - PullRequest
1 голос
/ 24 февраля 2012

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

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

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

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

в UIView.

1 Ответ

1 голос
/ 24 февраля 2012

Я полагаю, 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...