2014-12-29 3 views
0

Я работаю над приложением, в котором контроллер корневого представления, называемый ROOT, представляет собой просмотр контроллера вторичного представления, называет его «A», который встроен в навигационный контроллер, назовите его «NAV».Невозможно отключить два контроллера просмотра, встроенные в контроллер навигации

«ROOT» представляет «A» по тексту через следующий вызов внутри его реализации класса.

self.presentViewController(A, animated: true, completion: nil) 

Кнопка в виде «A» затем нажимает «B» на «стек контроллера представления NAV».

В рамках реализации класса «В», когда кнопка нажата, я пытался отправить пользователя обратно в представление, за которое отвечал «ROOT». Следующий метод работал:

self.presentViewController(ROOT, animated: true, completion: nil) 

следующие вызовы не сделали, хотя я считаю, что они должны учесть, что «А» был представлен модально на «ROOT»:

self.navigationController?.presentingViewController.dismissViewControllerAnimated(true, completion: nil) 
self.navigationController?.dismissViewControllerAnimated(true, completion: nil) 

Однако, я обнаружил, что оба из следующих объектов: «ноль»

self.navigationController?.presentingViewController 
self.navigationController?.presentedViewController 

Почему звонки, которые не работают, не работают? Разве это не правильный способ сделать это?

Разве это не то, что на самом деле работало в основном, добавляя в память еще один контроллер вида и вида, чтобы отслеживать? Таким образом, если бы я перешел с «Корни» на «А» на «Б» и снова и снова на «Корень», он в конечном итоге использовал бы слишком много памяти?

Почему два перечисленных в списке объектов отображаются как ноль?

+0

Вы не должны представлять A, вы должны представить NAV. – rdelmar

ответ

1

Если вы хотите нажать ViewController, он должен быть в пределах NavigationController. Установите 'A' как rootViewController из 'NAV'. Затем представляем «NAV».

В конце концов он отобразит «А». Затем вы можете нажать pop ViewController.

Если вы используете раскадровки попробуйте следующее:

let B = self.storyboard.instantiateViewControllerWithIdentifier ("B") as B 

self.navigationController.pushViewController(B, animated: true) 

EDIT:

Если вы хотите перейти Betweens некоторый вид лучше иметь все те, в одном навигационном контроллере. Или вы можете сделать что-то вроде этого:

Первый набор NAV ('ROOT' как его rootViewController) как rootViewController вашего окна. Если ROOT является окном входа в систему, когда пользователи успешно устанавливают «A» в качестве своего rootViewController. Если я вернусь к ROOT, вы выходите из системы, то просто измените rootViewController вашего NAV на ROOT. У меня есть пример Objective-C:

В моей AppDelegate:

LoginView *myAcc = [[LoginView alloc] initWithNibName:@"LoginView" bundle:nil]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController : myAcc]; 
self.window.rootViewController = navController; 

Когда пользователь, вошедший в Удачно:

AccountMenu *accMenu = [[AccountMenu alloc] initWithNibName:@"AccountMenu" bundle:nil]; 
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]]; 
[viewControllers removeLastObject]; 
[viewControllers addObject:accMenu]; 
[[self navigationController] setViewControllers:viewControllers animated:YES]; 

Его просто идея, которую я поделился, стараемся соответствовать вашим требованиям ,:)

Надеюсь, это поможет .. :)

+0

Именно так «B» представлен «A». Тем не менее, я хотел бы вернуть экран в «ROOT», который является контроллером представления, который представил «A». «A» встроен в контроллер навигации в качестве контроллера корневого представления. Если «A» (и, следовательно, навигационный контроллер, в который он встроен), представлен модально «ROOT», я должен вернуться к «ROOT», отклонив «A» или «B» правильно? – lane0335

+0

Есть ли проблема, если вы внедряете root в nav? Затем нажмите A и B? – Rashad

+0

Наверное, нет. Я просто хотел знать, есть ли способ сделать это, не вставляя его в один. Если вы (или кто-либо еще) знаете способ сделать так, чтобы это было просто. В противном случае я думаю, что это направление, в котором он должен идти. – lane0335

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