- (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中运行吗?
答案 0 :(得分: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];
答案 1 :(得分:1)
使用展开segues有一种更好的方法。
基本上你在ViewController上设置一个标记点,然后在它上面推动视图控制器。
然后在任何时候(当用户按下某个按钮或其他东西时)你可以弹回到viewController上,并带有标记。
你不再需要弄清楚要弹出多少视图控制器......它只是有效。
请参阅此StackOverflow answer。