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