【发布时间】:2015-04-06 10:12:53
【问题描述】:
在我的项目中,我使用了一些代码来处理后退按钮,如下所示。
NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
if ([[VCs objectAtIndex:[VCs count] - 2] isKindOfClass:[LoginViewController class]])
{
[VCs removeObjectAtIndex:[VCs count] - 2];
[VCs removeObjectAtIndex:[VCs count] - 2];
}
[self.navigationController setViewControllers: VCs];
在 iOS 7 中,我得到了想要的结果。但是对于 iOS 8.2 版本,可变数组 VCs 中的值只是堆栈中的 current 或 topViewController。但是后退按钮会将您导航到所有以前的视图控制器。但是导航堆栈中没有一个。ios8中的导航处理有什么变化吗?
我想从堆栈中删除登录屏幕视图控制器,以便在单击后退按钮时不会返回登录屏幕。我仅在 iOS 8.2 中遇到此问题(可能在 iOS 8 及更高版本中)。可能是什么问题?
编辑:
在prepareForSegue:中,我使用了以下代码:
if([[segue identifier] isEqualToString:@"mediaDetailSegue1"])
{
MovieDetailViewController *movieDetail;
if(isIOS8SystemVersion)
{
movieDetail = ([[segue destinationViewController]viewControllers][0]);
}
else
{
movieDetail = [segue destinationViewController];
}
movieDetail.videoData = [_mediaContentArray objectAtIndex:selectedIndex];
}
所以对于大于 8 的 iOS 版本,代码
movieDetail = ([[segue destinationViewController]viewControllers][0]);
被调用。我认为这是造成问题的原因。我做错了吗?
【问题讨论】:
-
您是否在两个操作系统版本和相同的测试场景中记录了阵列?
-
是的。在我的 iphone 4s 和 ios 7.2 中,所有的 viewControllers 都在显示。但是当我用 ios 8.2 连接一个 iphone 5s 时,数组 conunt 是一个。只有 topViewcontroller 在数组中。但是后退按钮会将您导航到所有以前的视图控制器。但是导航堆栈中都不存在它们。ios8中的导航处理是否有任何变化?
-
相当大的错误,如果是的话。你还有其他修改堆栈的代码吗?
-
是的..但只有当视图控制器数组的计数>4时才会进行修改..但在所有情况下,计数都是1..即使我们直接进入这个视图。
-
您显示的附加代码并没有改变任何东西,只是引用了一个控制器,但有趣的是它只有 8 个 - 为什么层次结构不同?还有什么其他8个具体逻辑?
标签: ios objective-c uiviewcontroller uinavigationcontroller