【问题标题】:Adding a subview to UINavigationController then back to the first subview?将子视图添加到 UINavigationController 然后回到第一个子视图?
【发布时间】:2011-08-19 21:14:46
【问题描述】:

我有一个基于导航的应用程序,其中我将 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,现在不能带回来?

【问题讨论】:

    标签: iphone xcode uinavigationcontroller abpeoplepickerview


    【解决方案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。

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

    Edit2: 只是因为我在这里有更多的空间,我可以尝试更好地了解您的层次结构。看起来像这样?

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

    意思是 ABPeoplePicker 嵌套在 Group 中,也就是嵌套在你的根目录中?我认为它不起作用,因为您实际拥有的是第一行的两个之一,而您想要的是第二行。因为我实际上不知道你有哪个没有看到它,我不能告诉你具体要改变什么,但如果你希望它像第二行的层次结构一样一直嵌套,你需要推送你的组视图到根视图控制器(这是您的导航控制器)上,然后您想再次将人员选择器推送到根视图控制器上。在此之后,您的后退按钮和视图切换应该按照您希望的方式工作。

    【讨论】:

    • 我的 NavigationController 有后退按钮,但它转到第一个视图 (RootViewController)。这就是我进入 ABPeoplePicker 视图的方式:RootViewController->GroupView->ABPeoplePickerNavigation 但后退按钮不会转到 GroupView,而是转到 RootViewController。
    • 我编辑了我的答案,试图更好地理解你的层次结构,让我知道这是否正确。我会尽快回复您。
    • 是的,层次结构与您绘制的完全一样。除了 PeoplePicker 没有使用 NavigationController 推送。我试过这个:[self.navigationController popToViewController:self animated:YES]; 但是没有显示 GroupView,我想是因为我没有推送 PeoplePicker,所以 NavigationController 无法弹出另一个视图。我将其替换为子视图。如何将其更改回 GroupView?
    • 我已经更新了更多答案,我认为您将视图添加到根导航控制器的方式让您感到困惑。
    猜你喜欢
    • 2015-09-04
    • 2013-10-15
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多