Перейти к следующему контроллеру с помощью UINavigationController на iPhone

Программа имеет навигационную панель и обычно при нажатии кнопки в viewController1 переходит к viewController2. при нажатии кнопки в viewController2 он переходит к viewController3. и пользователь может перейти назад от viewController3 к viewController2, а затем к viewController1, используя кнопку «Назад» на навигационной панели.

Я хочу сделать кнопку, которая программным способом приведет пользователя непосредственно к viewController3 из viewController1. затем пользователь может перейти назад от viewController3 к viewController2 к viewController1.

Есть ли способ вставить два вида в контроллер навигации? или это другой способ добиться желаемого поведения? как мне спроектировать это?

7
задан Yazzmi 24 August 2010 в 02:59
поделиться

3 ответа

Извините за неверное понимание вашего вопроса. Потому что вы хотите нажать 2 контроллера представления, а затем вернуться 1 на 1. Я думаю, что решение сейчас простое.

Вам нужно всего лишь 2 раза нажать на контроллер представления: 1 без анимации и 1 с анимацией, подобной этой:

[viewController1.navigationController pushViewController:viewController2 animated:NO];
[viewController2.navigationController pushViewController:viewController3 animated:YES];

Таким образом, для пользователя это происходит так, как будто вы нажимаете только 1, но за сценой вы фактически нажимаете 2 представления контроллеры. Затем, когда вы захотите вернуться, просто нужно выскочить 1 на 1.

9
ответ дан 6 December 2019 в 19:30
поделиться

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

0
ответ дан 6 December 2019 в 19:30
поделиться

Вы можете напрямую установить стек навигации в UINavigationController, используя. setViewControllers: animated: .

Например, предположим, что этот код находится где-то в viewController1, как обработчик нажатия кнопки в его представлении:

NSMutableArray* viewControllers = [self.navigationController.viewControllers mutableCopy];
UIViewController* controller = [[MyViewController2 alloc] init];
[viewControllers addObject:controller];
[controller release];
controller = [[MyViewController3 alloc] init];
[viewControllers addObject:controller];
[controller release];
[self.navigationController setViewControllers:viewControllers animated:YES];

Задача создания в верхней части этого с вызовом mutableCopy такова, что вы сохраняете все, что уже включено стек навигации.

4
ответ дан 6 December 2019 в 19:30
поделиться