【问题标题】:Popping multiple views from the navigation controller从导航控制器弹出多个视图
【发布时间】:2012-02-08 09:08:24
【问题描述】:

我有一个应用程序,它的根视图是 4 个表视图的菜单,用户通过选择加载另一个子视图的单元格来设置搜索查询,因此基本结构如下所示

Root View
- Parent View (search view)
--Sub View (user selects variables here to fill search parameters of the parent view

但是其中一个父视图搜索参数需要另一个子视图被推送到导航堆栈上,所以它看起来像

Root View
- Parent View (search view)
--Sub View (user selects variables here to fill search parameters of the parent view
---Sub View (related values to the previous subview i.e. Model / sub model)

我想知道是否有办法从这个子视图弹回父视图.. 我知道您可以弹出一个视图或弹出回根视图,但这次我想弹出两个子视图……这可能吗?

【问题讨论】:

    标签: iphone ios uitableview uiviewcontroller uinavigationcontroller


    【解决方案1】:

    UINavigationViewController

    popToViewController:animated:

    弹出视图控制器,直到指定的视图控制器位于导航堆栈的顶部。

    - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
    

    【讨论】:

    • 使用self.parentViewController.parentViewController获取祖父viewController。
    • 对,所以我认为这会从堆栈中弹出视图,直到它到达指定的视图控制器。非常感谢!
    【解决方案2】:

    您可以向 UINavigationController 添加类别以允许同时弹出多个控制器。

    UINavigationController+VariablePop.h

    #import <UIKit/UIKit.h>
    
    @interface UINavigationController (VariablePop)
    
    - (NSArray *)popViewControllers:(int)numPops animated:(BOOL)animated;
    
    @end
    

    UINavigationController+VariablePop.m #import "UINavigationController+VariablePop.h"

    @implementation UINavigationController (VariablePop)
    
    - (NSArray *)popViewControllers:(int)numPops animated:(BOOL)animated {
        NSMutableArray* returnedControllers = [NSMutableArray array];
        int indexToPopTo = self.viewControllers.count - numPops - 1;
        for(int i = indexToPopTo+1; i < self.viewControllers.count; i++) {
            UIViewController* controller = [self.viewControllers objectAtIndex:i];
            [returnedControllers addObject:controller];
        }
        UIViewController* controllerToPopTo = [self.viewControllers objectAtIndex:indexToPopTo];
        [self popToViewController:controllerToPopTo animated:YES];
        return returnedControllers;
    }
    
    @end
    

    然后你可以从视图控制器:

    NSArray* poppedControllers = [self.navigationController popViewControllers:2 animated:YES];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2014-12-09
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多