繁体   English   中英

iOS版。 viewControllers数组的错误?

[英]iOS. Bug with viewControllers array?

- (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,然后弹出最后一个UIVIewController。

我认为这些字符串毫无意义:

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

但是如果我删除它们然后我弹出2个最后的UIViewControllers并获得CustomViewController的标题而不是当前UIViewController的标题。

这是一个错误吗? 这段代码会在iOS 6中运行吗?

我不确定这是否真的有用,因为我不知道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];

通过使用展开segue,有一种更好的方法。

基本上你在ViewController上设置一个标记点​​,然后在它上面推动视图控制器。

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

你不再需要弄清楚要弹出多少个视图控制器......它只是起作用。

请参阅此StackOverflow答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM