2012-05-05 2 views
2

В моем приложении iOS у меня есть четыре UIViewController s, и ради аргумента давайте назовем их 1, 2, 3 и 4. У меня есть сегменты, ведущие от одного к следующему постепенно (1 -> 2, 2-> 3, 3-> 4). Тем не менее, в 4 я хочу, чтобы у вас была кнопка, которая может вернуться к одному. Я только изобразил один из способов сделать это, но я не мог понять, как его реализовать ...Возвращение двух UIViewControllers с использованием segues

Этот способ состоял бы в том, чтобы segue напрямую соединял 4-> 1, а когда segue называется delete 2 и 3 из памяти (иначе пользователь мог бы продолжать наращивать UIViewController, так как ни один из них не удаляется). Я не знаю, как удалить их из памяти, так как у меня нет никаких переменных, указывающих на них (т. Е. Они были созданы, когда их соответствующие вызовы были вызваны, насколько я знаю, у меня нет прямого доступа к их).

Я не знаю, если это лучший способ, но если вы можете понять, как это сделать (или лучший способ), любая помощь приветствуется :)

ответ

2

Вам нужно использовать UINavigationController, если вы еще этого не сделали.

Затем в 4-м зрения нужна просто кнопка с селектором, который делает следующее:

- (IBAction)goBackToFirstView:(id)sender { 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

Это будет обрабатывать всю память для вас и отправить вас обратно в первый контроллер представления, выталкивая все остальное от стека.

+0

Если все, что он хочет сделать, это вернуться к первому, тогда да. Вот как вы должны это делать. Если, однако, он хочет иметь возможность нажать кнопку «Назад» и снова посмотреть контроллер # 4, тогда это не будет сделано. – mweathers

+0

«Вам нужно использовать UINavigationController ...», я должен использовать только один? Я добавил один для каждого 'UIViewController', который я добавил в свою раскадровку ... –

+0

Он заявил, что хочет идти 1-> 2-> 3-> 4-> 1 –

0
NSArray *array = [NSArray arrayWithObject:[navigationController.viewControllers objectAtIndex:navigation.viewControllers.count-1]]; 
    navigationController.viewControllers = array; 

Затем выполните SEGUE.

+0

Это плохой способ сделать это. –

+0

Вы хотели бы рассказать о том, почему это плохо? – mweathers

+0

Вы действительно должны вручную управлять своим детским просмотрщиком контроля UINavigationControllers таким образом. Вы должны использовать встроенные функции для выскакивания, нажатия и т. Д. Причина в том, что вы удаляете объекты из своего элемента управления, что не обязательно освобождает их, и может привести к тому, что фактические диспетчеры просмотра будут сохранены в памяти, а navigationController потеряет свои указатели. –

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