navigationController.viewControllers在iOS 8.2中的工作方式不同

时间:2015-04-06 10:12:53

标签: ios objective-c uiviewcontroller uinavigationcontroller

在我的项目中,我使用了一些代码来处理后退按钮,如下所示。

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,可变数组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];
    }

因此,对于大于8的iOS版本,代码

 movieDetail = ([[segue destinationViewController]viewControllers][0]);

被调用。我认为这是导致这个问题的原因。我做错了吗?

2 个答案:

答案 0 :(得分:1)

我得到了我的导航堆栈只有一个 viewController 的原因。 在iOS8及以上版本中,如果我们通过第二个VC的navigationController从viewController到第二个viewController创建一个segue,那么第二个VC的navigationStack将只包含topViewController。

我尝试创建一个示例项目。如果segue直接从VC到第二个VC,那么VC2的导航堆栈将包含VC1和VC2。如果segue是通过VC2的导航控制器,那么导航堆栈VC2将仅包含VC2。iOS8的转换行为。

在这两种情况下,应用程序的行为与ios中的相似7.不知道为什么它在ios8中表现得很奇怪

答案 1 :(得分:0)

我正在尝试使用iOS 8.2。 self.navigationController.viewControllers返回堆栈中的所有视图控制器。没有这样的问题。我不确定你为什么要面对这样的问题。

尝试使用此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];