1
- (void)viewWillDisappear:(BOOL)animated
{
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
        if ([self.navigationController.viewControllers.lastObject isKindOfClass:[CustomViewController class]]) {
            NSArray *tempArr = self.navigationController.viewControllers;
            self.navigationController.viewControllers = tempArr;
            [self.navigationController popViewControllerAnimated:YES];
            return;
        }
    }
    [super viewWillDisappear:animated];
}

如果用户按下后退按钮并且之前的 UIViewController 是 CustomViewController,则弹出 2 个最后一个 UIViewControllers,否则弹出 1 个最后一个 UIVIewController。

我认为这些字符串没有任何意义:

        NSArray *tempArr = self.navigationController.viewControllers;
        self.navigationController.viewControllers = tempArr;

但是如果我删除它们,我会弹出最后一个 UIViewControllers 并获取 CustomViewController 的标题,而不是当前 UIViewController 的标题。

它是一个错误吗?这段代码能在 iOS 6 中工作吗?

4

2 回答 2

2

我不确定这是否真的有效,因为我不知道 popViewController 是在弹出之前还是之后检查数组。这个想法是删除最后一个对象而不是两次弹出 viewController。

- (void)viewWillDisappear:(BOOL)animated
{
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
        if ([self.navigationController.viewControllers.lastObject isKindOfClass:[CustomViewController class]]) {
            NSMutableArray *tempArr = [self.navigationController.viewControllers mutableCopy];
            [tempArr removeLastObject];
            self.navigationController.viewControllers = tempArr;
            return;
        }
    }
    [super viewWillDisappear:animated];
于 2012-10-03T10:01:18.160 回答
1

使用 unwind segues 有更好的方法来做到这一点。

本质上,您在 ViewController 上设置了一个标记点​​,然后将视图控制器推到它上面。

然后在任何时候(当用户按下按钮或其他东西时),您都可以弹回带有标记的 viewController。

您不再需要计算要弹出多少视图控制器等......它只是工作。

请参阅此StackOverflow 答案

于 2012-10-03T09:59:58.067 回答