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

3

我有一个基于导航的应用程序,我将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];

我不明白,我已经从子视图保存了navView,现在我无法将其带回来?

1个回答

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中,而Group又嵌套在您的根视图中?我认为它不起作用是因为实际上您在第一行中只有两个中的一个,而您想要的是第二行。因为我没有看到您使用的是哪一个,所以无法告诉您具体需要更改什么,但如果您希望像第二行的层次结构一样全部嵌套,您需要将组视图推入根视图控制器(即导航控制器),然后再次将People Picker推入根视图控制器。完成此操作后,您的返回按钮和视图切换应该按照您想要的方式工作。


我的NavigationController有返回按钮,但它会回到第一个视图(RootViewController)。这是我进入ABPeoplePicker视图的方式: RootViewController->GroupView->ABPeoplePickerNavigation 但是返回按钮不会回到GroupView,而是回到RootViewController。 - Hadi Sharghi
我编辑了我的回答,试图更好地理解你的层次结构,请告诉我是否正确。我会尽快回复你。 - Karoly S
是的,层次结构与您所绘制的完全相同。除了PeoplePicker没有使用NavigationController进行推送。 我尝试了这个:`[self.navigationController popToViewController:self animated:YES];`但是GroupView没有显示出来,我认为这是因为我没有推送PeoplePicker,所以NavigationController无法将另一个视图弹回。我将其替换为子视图。如何将其改回GroupView? - Hadi Sharghi
我已经更新了答案,我认为你添加视图到根导航控制器的方式可能会让你感到困惑。 - Karoly S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接