Iphone 是否将子视图添加到UINavigationController,然后返回到第一个子视图?

Iphone 是否将子视图添加到UINavigationController,然后返回到第一个子视图?,iphone,xcode,uinavigationcontroller,abpeoplepickerview,Iphone,Xcode,Uinavigationcontroller,Abpeoplepickerview,我有一个基于导航的应用程序,其中我将ABPeoplePickerNavigationController作为子视图添加到我的导航控制器中,如下所示: 在将子视图添加到navView之前,我已保存了视图 ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init]; peoplePicker.peoplePickerDelegate = self; navV

我有一个基于导航的应用程序,其中我将ABPeoplePickerNavigationController作为子视图添加到我的导航控制器中,如下所示: 在将子视图添加到
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];

我不明白,我已从子视图中保存了导航视图,现在无法将其恢复?

您需要添加“返回”按钮,如下所示:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];   
理想情况下,NavigationController是应用程序的根,在这种情况下,任何其他视图都是它的子视图,因此您永远不会真正地离开导航控制器,您只需更改显示的实际视图

此外,您尝试引用第一个视图的方式相当混乱/混乱。您应该将其更改为以下内容:

[appDelegate.navigationController topViewController];    

我不能肯定地告诉你该使用哪一个,因为我不确定你的视图层次结构,但我强烈建议你尝试优化代码

我可能应该注意到导航控制器上的后退按钮和下面的两行做了不同的事情。“后退”按钮返回一个视图,而PoptRoot和topView都旨在将您带回第一个viewController

编辑:将后退按钮代码更改为我实际使用的代码

Edit2:仅仅因为我这里有更多的空间,我就可以试着更好地理解你的继承权。看起来像这样

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

Root View
-> Group View
-> -> ABPeoplePicker

这意味着ABPeoplePicker嵌套在组中,并且嵌套在您的根中?我认为它不起作用,因为当你想要的是第二条线时,你实际上拥有的是第一条线上的两条线之一。因为我不知道在没有看到它的情况下你有哪一个,我不能确切地告诉你要更改什么,但是如果你想让它像第二行的继承人一样嵌套,你需要将你的组视图推到根视图控制器(这是你的导航控制器)上,然后,您希望再次将人员选择器推到根视图控制器上。在此之后,您的后退按钮和视图切换应该按照您希望的方式工作

我的NavigationController有后退按钮,但它会转到第一个视图(RootViewController)。这就是我如何进入ABPeoplePicker视图的方法:RootViewController->GroupView->ABPeoplePickerNavigation但后退按钮不会转到GroupView,而是转到RootViewController。我编辑了我的答案,试图更好地理解您的层次结构,请告诉我这是否正确。我会尽快回复你的。是的,层次结构和你画的一模一样。除了PeoplePicker没有使用NavigationController。我试过:
[self.navigationController-popToViewController:self-animated:YES]
但是没有显示GroupView,我想这是因为我没有推PeoplePicker,所以NavigationController不能弹出另一个视图。我将其替换为子视图。如何将其更改回GroupView?我已经更新了一点答案,我认为您将视图添加到根导航控制器的方式会把您搞砸。
Root View                     or                 Root View
-> Group View                                    -> Group View
ABPeoplePicker View                              -> ABPeople Picker View

Root View
-> Group View
-> -> ABPeoplePicker