2014-10-10 4 views
1

Я думаю, что я в маленькой проблеме. У меня есть 5 контроллеров представления в приложении для iPhone. Например, их имя похоже на один, два, три, четыре и пять, и их поток навигации подобен 1-> 2-> 3-> 4-> 5. Теперь я смущаюсь, когда я нажимаю кнопку на 5-м контроллере представления. Я хочу видеть номер 3, но в это время, когда я нажму кнопку «Назад», он вернется к пятому представлению. Я хочу 2 вместо 5. Как я могу это сделать? Мой код:Ручка Навигация по объекту c

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
SettingViewController *dealVC1 = (SettingViewController *)[storyboard instantiateViewControllerWithIdentifier:@"SettingViewController"]; 
[self.navigationController pushViewController:dealVC1 animated:YES]; 

Я использую код выше для навигации.

+0

Я вижу два варианта для вас: 1) когда пользователь нажимает кнопку на 5-м vc, поп-файл на третий vc вместо создания нового. 2) не используйте UINavigationViewController, но делайте все это сами, и таким образом вы будете иметь контроль над всей навигацией –

+0

вы можете мне объяснить? – user3418619

+0

Использовать пользовательские кнопки «Назад» или «Развернуть сеанс» или «Обрабатывать вручную кнопку возврата по умолчанию» –

ответ

1

Допустим, все ваши контроллеры навигации просто UIViewController и их идентификаторы vc1 для первого контроллера представления vc2 для второго и т.д.

Теперь предположим, что вы находитесь в 5-м контроллере представления и в массиве родительского UINavigationController.viewControllers у вас есть: [vc1, vc2, vc3, vc4, vc5] , Теперь, если вы хотите, чтобы вернуться к 2-й контроллер представления вы должны добавить эту функцию в 5-м контроллере представления:

- (void)popTo2ndViewController { 
    NSArray *controllers = self.navigationController.viewControllers; 
    UIViewController *vc2 = controllers[1]; // If your viewControllers doesn't look like 1>2>3>4>5 here you may get an error. 
    [self.navigationController popToViewController:vc2 animated:YES]; 
} 

Для вызова этой функции вы должны переопределить назад кнопку действия, @iDeveloper упомянул в своем ответе. Когда popTo2ndViewController закончит, массив self.navigationController будет выглядеть так: [vc1, vc2].

+0

Это именно то, что я имел в виду под моим комментарием :) –

+0

Вы правы, у нас есть та же идея :-) – Szu

+0

да, правая благодарность вам тоже за работу ... – user3418619

0

Вместо того, чтобы перейти к вашему текущему номеру 3 контроллера, нажмите номер 3 просмотрите контроллер в стек навигации и передайте необходимые вам данные.

как 1 -> 2 -> 3 -> 4 -> 5 -> 3, поэтому откат в новом номере 3 вернется к 5 по вашему желанию.

1

Вы можете переопределить backButton, представленный на панели слева на панели навигации, и определить свое действие для перехода либо на 2-й, либо на любой контроллер вида.

1

Зачем нажимать на контроллер 3? Вместо этого вы можете просмотреть контроллер 3, поэтому на контроллере 3 заднего вида у вас будет контроллер вида 2.

Пройдите через все контроллеры просмотра в контроллере навигации. Поставьте условие для контроллера 3 просмотра и просто нажмите на этот контроллер.


NSArray *arr = self.navigationcontrollers.viewcontrollers; 

for(int i = 0; i<[arr count]; i++) { 
    if([arr objectAtIndex:i]isKindOgClass:[ViewController3 Class]]) { 
     ViewController3 *v3 = (ViewController3 *)[arr objectAtIndex:3]; 
     [self.navigationcontroller popToConroller:v3 animated:YES]; 
     break; 
    } 
} 

Я не уверен, это будет работать с раскадрой или нет. Но попробуйте один раз.

+0

Можете ли вы дать мне код для всплывающего 3-го представления? – user3418619

+0

Я отредактировал свой ответ.Это может помочь вам. – spaleja

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