1

我是 Objective-C 编码的新手,我正在尝试使用 pop to 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如此

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

所以这行不通。

我在这里先向您的帮助表示感谢。对不起,如果这个问题太基本了。

4

2 回答 2

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];
}
于 2014-05-23T23:33:40.670 回答
0

我个人认为这不是一个基本问题,即使我在这种情况下也感到震惊。但是我通过使用“中介者设计模式”找到了一个很好的解决方案,并通过结合以下方法将我的自定义 UINavigationController 开发为协调器:

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

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

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

于 2014-05-24T07:47:40.943 回答