iphone - 将 subview 添加到 UINavigationController 然后返回第一个 subview ?

标签 iphone xcode uinavigationcontroller abpeoplepickerview

我有一个基于导航的应用程序,其中我将 ABPeoplePickerNavigationController 作为 subview 添加到我的导航 Controller 中,如下所示: 在将 subview 添加到 navView 之前,我已经保存了 View 。

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 后,我想返回到之前的 View 。我使用了这段代码,但它不起作用。

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

我不明白,我已经从 subview 中保存了 navView,现在我无法将其恢复?

最佳答案

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

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

理想情况下,您的 NavigationController 是应用程序的根,在这种情况下,任何其他 View 都是它的 subview ,因此您永远不会真正离开导航 Controller ,您只需更改显示的实际 View 。

此外,您尝试引用第一个 View 的方式相当困惑/令人困惑。您应该将其更改为:

[appDelegate.navigationController topViewController];    

[appDelegate.navigationController popToRootViewController];

我无法告诉您具体使用哪个,因为我不确定您的确切 View 层次结构,但我强烈建议您尝试优化该代码。

我可能应该注意到导航 Controller 上的后退按钮和下面的两行执行不同的操作。后退按钮返回一个 View ,而 popToRoot 和 topView 都旨在将您带回到第一个 viewController。

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

Edit2:因为我这里有更多的空间,所以我可以尝试更好地理解你的继承体系。看起来像这样?

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

Root View
-> Group View
-> -> ABPeoplePicker

这意味着 ABPeoplePicker 嵌套在 Group 中,并且嵌套在您的根中?我认为它不起作用,因为你实际拥有的是第一行中的两个之一,而你想要的是第二行。因为在没有看到它的情况下我实际上不知道你有哪一个,所以我无法确切地告诉你要更改什么,但是如果你希望它像第二行的层次结构一样一直嵌套,你需要推送你的组 View 到 Root View Controller (这是您的导航 Controller ),然后您想再次将人员选择器推到 Root View Controller 上。之后,您的后退按钮和 View 切换应该按照您想要的方式工作。

关于iphone - 将 subview 添加到 UINavigationController 然后返回第一个 subview ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7127503/

相关文章:

ios - 自定义对象的初始化返回null

ios - cocoa touch : How To Change UIView's Border Color And Thickness?

iphone - 如何像 Tweetie 应用程序一样在 UITableViewCell 底部添加渐变

iphone - 如何通过 Xcode 在 iPhone 上安装未签名的应用程序?

ios - 如何使用 Swift 3 在 iOS 10 上隐藏状态栏及其内容?

ios - 如何更改 UINavigationController Title & backButton 编程?

iphone - 没有标题动画的pushViewController

ios - 以编程方式呈现 ViewController 时导航栏未加载

python - 使用 Alamofire iOS 以 Base64 将图像上传到服务器

iphone - 关于iPhone上URL中NSString字符无效的问题