2012-07-02 7 views
2

Im использованием Navigation Controller для моего ViewControllers, я поставил свою importantViewController, как что-то вроде этого, чтобы быть его RootView:Навигационное между 2 ViewControllers

UINavigationController *navControl = [[UINavigationController alloc] initWithRootViewController: vc]; 
[self presentModalViewController: navControl animated: YES]; 

Затем я pushView anotherView FrontViewController так:

[self.navigationController pushViewController:vc animated:YES]; 

После нажатия кнопки в FrontViewController другой вид будет нажат ViewA, но он связан с другим ViewController ViewB таким же образом, как это РАЗ:

[self.navigationController pushViewController:vc animated:YES]; 

(который я думаю, что Im делает неправильно при отклонении любого из них с [self.navigationController popViewControllerAnimated:YES];)

Это иллюстрация:

enter image description here

Моя проблема , Мне нужно перемещаться между View A и View B, а затем, когда я увольняю их, он вернется к FrontViewController. Как ребенок ребенка Вид. Благодарю.

+0

попробуйте [self.navigationController popToRootViewControllerAnimated: YES]; ? –

+0

Я не хочу возвращаться к 'importantViewController' просто' FrontViewController' – Bazinga

+0

См. Обновленный ответ –

ответ

2

Я думаю, что это для dismissModalViewController, но попробовать это,

От Просмотр B кода записи, как этот

[[self parentViewController].navigationController popViewControllerAnimated:YES]; 

и С видом А вы можете написать,

[self.navigationController popViewControllerAnimated:YES]; 

Или вы можете использовать это,

[self.navigationController popToViewController:frontViewController animated:YES]; 

UPDATE

for (UIViewController *tmpController in [self.navigationController viewControllers]) 
{ 
    if ([tmpController isKindOfClass:[FrontViewController class]]) 
    { 
     [self.navigationController popToViewController:tmpController animated:YES]; 
     break; 
    } 
} 

Это является лучшим решением для достижения этой цели.

Напиши этот код на оба вида A или B.

Надеется, что он теперь работает :-)

+0

Я хочу перемещаться между View A, затем View B, а затем, когда Im finish хочет вернуться к 'frontViewController', как это сделать? – Bazinga

+0

Да, дорогая, То же самое, что я сказал вам обоим, как на View A, так и на View B, всякий раз, когда вы хотите вернуться, просто напишите этот код при нажатии кнопки. Просто попробуйте использовать это. –

+0

имеет проблему с View A to View B, а затем наоборот , – Bazinga

0
[self.navigationController popToViewController:frontViewController animated:YES]; 

Попробуйте это, я думаю, это будет полезно для вас.

0

В FrontViewController После нажатия кнопки:

ViewA instance 
    [self.navigationController pushViewController:ViewA animated:YES] 

Когда ViewA disissmed

[self.navigationController popViewControllerAnimated:YES]; 

нагрузки ViewB в ViewA

ViewB instance 
    [self.navigationController pushViewController:ViewB animated:YES] 

На b извед viewB к FrontViewController

FrontViewController instance 
[self.navigationController popToViewController:FrontViewController animated:YES]; 

на спине viewB в viewA

[self.navigationController popViewControllerAnimated:YES]; 
2

Существует один способ @Prasad G указывается. Но проблема с этим решением - вам нужен тот же объект frontViewController. Вы не можете сделать это с созданием нового объекта. Для перехода на этот путь объявить frontViewController объект в appdelgate и выдвигая его из importantVC использовать

appdelgate.frontViewController = // initialize 
// Push it 

При переходе обратно от вида B

[self.navigationController popToViewController:appdelegate.frontViewController animated:YES]; 

Другим решением является

for (UIViewController *vc in [self.navigationController viewControllers]) { 
    if ([vc isKindOfClass:[FrontViewController class]]) { 
     [self.navigationController popToViewController:vc animated:YES]; 
     break; 
    } 
} 

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

Использование первого решения, если у вас есть 10 контроллеров представления, и вы хотите перейти на любой из них, чтобы вы сначала создали объект всех 10 View Controller в appdelegate.

Этот код может иметь проблемы правописания, как я только что напечатал это здесь

Надеются, что это помогает :)

UPDATE

-> Вы impVC как ваш взгляд корня -> Вы толкнули frontVC -> Оттуда вы нажали VC_A -> Оттуда вы хотите нажать VC_B

, так что вы закончили с pushin г и возвращаться к VC_A вы можете использовать

[self.navigationController popViewControllerAnimated]; 

Теперь вы можете снова прийти на VC_B и снова вставьте его. Для перехода на frontVC с VC_A вы можете использовать popViewControllerAnimated и для перехода на frontVC с VC_B вы можете использовать цикл for, о котором я упомянул.

Просьба пояснить, если вы ищете что-либо еще. Если вы все еще сталкиваетесь с проблемой, пожалуйста, объясните.

+0

Я хочу для перехода между View A, затем View B, затем VICE VERSA, затем, когда Im закончить и вы хотите вернуться, он вернется к нажатию кнопки 'frontViewController', как это сделать? – Bazinga

+0

для просмотра A и, чем View B, вы можете нажать вид B от A и вернуться к просмотру. Использовать Pop. Или ты не хочешь поп? –

+0

поэтому я следую за вами, это было правильно, чтобы просмотреть A для просмотра B, но когда View B to A View застрял, тогда, когда вы хотите вернуться в FrontView, он возвращается к View A. – Bazinga

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