弹出以查看控制器

时间:2014-05-23 21:34:06

标签: ios objective-c uinavigationcontroller pushviewcontroller poptoviewcontroller

我是编码Objective-C的新手,我正在尝试使用pop来viewController。要点击按钮时执行此操作,请使用

[self.navigationController popToViewController:(what goes here) animated:YES];

我知道它有一个UIViewController*,但我想知道我在哪里声明这个以及我将使用什么代码来声明它。

我的基本故事板是我有4个视图控制器A,B,C,D和A是推到B的根,它推到C推到D,我的按钮在D上,我试图回弹到B.索引方法中的对象不起作用,因为它有时不会A->B->C->D A->C->B->D {<1}}所以

[self.navigationController popToViewController: [self.navigationController.viewControllers objectAtIndex:2] animated:YES];

所以这不起作用。

提前感谢您的帮助。对不起,如果这个问题太基础了。

2 个答案:

答案 0 :(得分:1)

您需要一种方法来找到要弹出的所需视图控制器。

-(IBAction)popToDesiredViewController:(id)sender
{
    UIViewController *desiredVC = nil;

    // LOOK AT ALL VIEW CONTROLLERS IN NAVIGATION CONTROLLER
    for (UIViewController *oneVC in self.navigationController.viewControllers) {

        // CHECK IF THIS IS THE VIEW CONTROLLER YOU WANT
        // change this to your logic
        BOOL foundDesiredVC = [oneVC isKindOfClass: [SignInVC class]]; 

        if (foundDesiredVC) {
            desiredVC = oneVC;
            break;
        }
    }

    [self.navigationController popToViewController:desiredVC animated:YES];
}

答案 1 :(得分:0)

我个人认为这不是一个基本问题,即使我遇到了这种情况。但是我通过使用“Mediator设计模式”找到了一个很好的解决方案,并通过组合方法开发我的自定义UINavigationController作为协调器:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

并维护我自己的导航堆栈。

如果您的导航方式不可预测,协调员(您的自定义UINavigationController)必须能够控制您的导航。