我有一个基于导航的应用程序,其中我将ABPeoplePickerNavigationController作为子视图添加到我的Navigation Contorller中,如下所示:
在将子视图添加到navView
之前,我已保存视图。
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];
我没理解,我已经从子视图中保存了navView,现在我无法将其恢复?
答案 0 :(得分:1)
您需要添加后退按钮,如下所示:
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都旨在将您带回到第一个viewController。
修改:将后退按钮代码更改为我实际使用的代码
编辑2:因为我在这里有更多的空间,我可以尝试更好地理解你的层次结构。它看起来像这样?
Root View or Root View
-> Group View -> Group View
ABPeoplePicker View -> ABPeople Picker View
Root View
-> Group View
-> -> ABPeoplePicker
意味着ABPeoplePicker嵌套在Group中,并且嵌套在root中?我认为它不起作用,因为你实际拥有的是第一行中的两个之一,当你想要的是第二行。因为我实际上并不知道你有哪一个没有看到它,我无法告诉你究竟要改变什么,但是如果你想让它一直嵌套在第二行的heirarchy上,你需要推动你的组视图在根视图控制器(这是您的导航控制器)上,然后您想再次将People Picker推送到根视图控制器上。在此之后,您的后退按钮和视图切换应该按照您希望的方式工作。