abh*_*ran 5 objective-c uiviewcontroller uinavigationcontroller ios
在我的项目中,我使用一些代码来处理后退按钮,如下所示.
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];
Run Code Online (Sandbox Code Playgroud)
在iOS 7中,我得到了理想的结果.但是对于iOS版本8.2,可变数组VC中的值只是堆栈中的当前或topViewController.但后退按钮将导航到所有以前的viewcontrollers.但是导航堆栈中没有一个存在.在ios8中导航处理有什么变化吗?
我想从堆栈中删除登录屏幕viewcontroller,以便在单击后退按钮时,它不会返回到登录屏幕.我仅在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];
}
Run Code Online (Sandbox Code Playgroud)
所以对于iOS版本大于8的代码
movieDetail = ([[segue destinationViewController]viewControllers][0]);
Run Code Online (Sandbox Code Playgroud)
叫做.我认为这是导致这个问题的原因.我做错了吗?
我明白了为什么我的导航堆栈只有一个 viewController。 在iOS8及以上版本中,如果我们通过第二个VC的navigationController从一个viewController到第二个viewController,那么第二个VC的navigationStack将只包含topViewController。
我尝试创建一个示例项目。如果segue是从VC直接到第二个VC,那么VC2的导航堆栈将包含VC1和VC2。如果segue是通过VC2的导航控制器,那么VC2的导航堆栈将包含仅限 VC2。iOS8 的奇怪行为。
在这两种情况下,该应用程序在 ios 7 中的行为类似。不知道为什么它在 ios8 中的行为很奇怪
| 归档时间: |
|
| 查看次数: |
3414 次 |
| 最近记录: |