将子视图添加到UINavigationController然后回到第一个子视图?

问题描述:

我有一个导航为基础的应用程序中,我加入的ABPeoplePickerNavigationController作为一个子视图到我的导航Contorller这样的: 我有救子视图添加到navView前视图。将子视图添加到UINavigationController然后回到第一个子视图?

ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init]; 
peoplePicker.peoplePickerDelegate = self; 

navView = [[UIView alloc] init]; 
navView = [[self.view superview] superview]; 

[[[self.view superview] superview] addSubview:[peoplePicker view]]; 

它工作正常,但是当我完成PeoplePicker并且我想返回到以前的视图。我用这个代码,但它不起作用。

[[[self.view superview] superview] addSubview:navView]; 

我不明白,我从子视图中保存了导航视图,现在我无法将它带回来?

您需要添加后退按钮,就像这样:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil]; 
self.navigationItem.backBarButtonItem = backButton; 
[backButton release]; 

理想的情况下你的NavigationController是你的应用程序的根,在这种情况下,任何其他的看法是它的一个子视图,所以你从来没有真实地,务必远离您的导航控制器,您只需更改显示的实际视图。

而且在尝试引用您的第一个视图的方式是相当凌乱/混乱。你应该将其更改为类似:

[appDelegate.navigationController topViewController];  

[appDelegate.navigationController popToRootViewController]; 

我不能告诉你一定是我不知道你的确切视图层次的使用哪个,但我会强烈建议您尝试优化该代码。

我也许应该注意的是,以下的两行导航控制器上的后退按钮,并做不同的事情。后退按钮可让您返回一个视图,而popToRoot和topView都旨在让您回到第一个视图控制器。

编辑:改变了后退按钮的代码的代码实际上我用

EDIT2:只是因为我有更多一点空间在这里我可以试着去了解你的层次结构更好。它看起来像这样?

Root View      or     Root View 
-> Group View         -> Group View 
ABPeoplePicker View        -> ABPeople Picker View 

Root View 
-> Group View 
-> -> ABPeoplePicker 

这意味着ABPeoplePicker嵌套在Group中,并且嵌套在根中?我认为它不起作用,因为你实际拥有的是第一行中的两个之一,当你想要的是第二行。因为我实际上并不知道哪一个你没有看到它,所以我不能确切地告诉你要改变什么,但是如果你想让它像第二行中的heirarchy一样嵌套,你需要推动你的组视图到根视图控制器(这是您的导航控制器)上,然后您想要再次将People Picker推到根视图控制器上。在此之后,您的后退按钮和视图切换应按照您希望的方式进行。

+0

我NavigationController具有后退按钮,但它进入第一个视图(RootViewController的)。这是我如何去ABPeoplePicker观点: RootViewController-> GroupView-> ABPeoplePickerNavigation 但后退按钮不会去GroupView,它进入RootViewController的。 – Hadu

+0

我编辑了我的答案,试图更好地理解你的层次结构,让我知道如果这是正确的。我会尽力尽快回复你。 –

+0

是的,层次结构与您绘制的层次结构完全相同。除PeoplePicker未使用NavigationController进行推送外。 我试过了: '[self.navigationController popToViewController:self animated:YES];' 但GroupView没有显示,我想这是因为我没有推PeoplePicker,所以NavigationController无法弹出另一个视图背部。我将其替换为子视图。我怎样才能将它改回GroupView? – Hadu