繁体   English   中英

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

[英]Adding a subview to UINavigationController then back to the first subview?

我有一个基于导航的应用程序,其中我将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,现在我无法将其恢复?

您需要添加后退按钮,如下所示:

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推送到根视图控制器上。 在此之后,您的后退按钮和视图切换应该按照您希望的方式工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM