后退按钮不回

时间:2014-04-12 19:18:44

标签: ios objective-c

使用此代码推送ViewController后

UIViewController *vc = [[self storyboard] instantiateViewControllerWithIdentifier:@"frontCardViewController"];
[self.navigationController pushViewController:vc animated:YES];

我使用此代码删除了我不再需要的所有ViewControllers

NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
NSArray *array = [[NSArray alloc] initWithArray:navigationArray];
for (UIViewController *viewController in array) {
    if ([viewController isKindOfClass:[RITCardViewController class]]) {
            RSLog(@"Is kind of Class RITCardViewController");
            [navigationArray removeObject:viewController];
    }
}
self.navigationController.viewControllers = navigationArray;

导航阵列现在看起来像这样:

"RITMainViewController: 0x10d81fc1>",
"RITDetailViewController: 0x10d847880",
"RITTestResultViewController: 0x113d0e090"

但问题是如果现在按下导航栏中的后退按钮,它会返回到第二个屏幕。但是当再次按下后退按钮时,它只会停留在此屏幕上。它似乎已经移除了我删除的所有屏幕,但没有显示它们。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

尝试这样的事情:

NSMutableArray *viewControllers = [@[] mutableCopy];
for (UIViewController *vc in self.nagivationController.viewControllers)
{
    if (NO == [vc isKindOfClass:[RITCardViewController class]])
        [viewControllers addObject:vc];
}
self.navigationController.viewControllers = viewControllers;

通过从视图控制器阵列中删除当前所在的视图控制器,确保不会损坏堆栈。假设您当前的视图控制器不是RITCardViewController的实例,那么您应该没问题。否则,您必须在代码中弥补它。