navigationController.viewControllers 在 iOS 8.2 中的工作方式不同
navigationController.viewControllers Works differently in iOS 8.2
在我的项目中,我使用了一些代码来处理后退按钮,如下所示。
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。但是后退按钮会将您导航到所有以前的 viewcontroller。但是 none 存在于导航中 stack.Is 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];
}
所以对于大于 8 的 iOS 版本,代码
movieDetail = ([[segue destinationViewController]viewControllers][0]);
被调用。我认为这是导致问题的原因。我做错了吗?
我正在对 iOS 8.2 进行同样的尝试。 self.navigationController.viewControllers returns stack.There 中的所有视图控制器都不是这样 issues.I 不确定您为什么会遇到这样的问题。
尝试使用这个 Code.It 对我来说效果很好。
NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
for(int i = 0; i < VCs.count; i++)
{
UIViewController *vc = VCs[i];
if ( [vc isKindOfClass:[LoginViewController class]])
{
[VCs removeObjectAtIndex:i];
}
[self.navigationController setViewControllers: VCs];
我知道为什么我的导航堆栈只有一个 viewController。
在iOS8及以上,如果我们通过第二个VC的navigationController从viewController到第二个viewController进行segue,那么navigationStack的第二个 VC 将只包含 topViewController。
我尝试创建一个示例 project.If segue 是直接从 VC 到第二个 VC,然后 VC2 的导航堆栈将包含 VC1 和 VC2.If segue 是通过 VC2 的导航控制器,那么 VC2 的导航堆栈将包含 VC2 only.Strange 的行为iOS8.
在这两种情况下,应用程序在 ios 中表现相似 7.Dont 知道为什么它在 ios8
中表现奇怪
在我的项目中,我使用了一些代码来处理后退按钮,如下所示。
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。但是后退按钮会将您导航到所有以前的 viewcontroller。但是 none 存在于导航中 stack.Is 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];
}
所以对于大于 8 的 iOS 版本,代码
movieDetail = ([[segue destinationViewController]viewControllers][0]);
被调用。我认为这是导致问题的原因。我做错了吗?
我正在对 iOS 8.2 进行同样的尝试。 self.navigationController.viewControllers returns stack.There 中的所有视图控制器都不是这样 issues.I 不确定您为什么会遇到这样的问题。
尝试使用这个 Code.It 对我来说效果很好。
NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
for(int i = 0; i < VCs.count; i++)
{
UIViewController *vc = VCs[i];
if ( [vc isKindOfClass:[LoginViewController class]])
{
[VCs removeObjectAtIndex:i];
}
[self.navigationController setViewControllers: VCs];
我知道为什么我的导航堆栈只有一个 viewController。 在iOS8及以上,如果我们通过第二个VC的navigationController从viewController到第二个viewController进行segue,那么navigationStack的第二个 VC 将只包含 topViewController。
我尝试创建一个示例 project.If segue 是直接从 VC 到第二个 VC,然后 VC2 的导航堆栈将包含 VC1 和 VC2.If segue 是通过 VC2 的导航控制器,那么 VC2 的导航堆栈将包含 VC2 only.Strange 的行为iOS8.
在这两种情况下,应用程序在 ios 中表现相似 7.Dont 知道为什么它在 ios8
中表现奇怪