找到当前的顶视图控制器并推送视图控制器

时间:2015-05-12 17:58:11

标签: ios objective-c uinavigationcontroller tabbar pushviewcontroller

我有一个像这样的UICollectionView:

enter image description here

在每个单元格上,我添加一个按钮。当我单击该按钮时,它将推送到另一个视图控制器。它工作正常。但是当我尝试同时单击2按钮时(例如:Cell 1和Cell 7)。它称之为“推”两次。我收到警告:

  

嵌套推送动画可能导致导航栏损坏。   在意外状态下完成导航过渡。导航栏   子视图树可能已损坏。

这是我的代码:

AppDelegate.m

+ (AppDelegate *)shareInstance{
    return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}

- (UIViewController *)currentVisibleController{
    id rootController = self.window.rootViewController;

    if ([rootController isKindOfClass:[UINavigationController class]]) {
        UINavigationController *navigationController = (UINavigationController *)rootController;
        return navigationController.topViewController;
    }

    if ([rootController isKindOfClass:[UITabBarController class]]) {

        UITabBarController *tabbarController = (UITabBarController *)rootController;
        id topViewController = [tabbarController.viewControllers objectAtIndex:tabbarController.selectedIndex];
        if ([topViewController isKindOfClass:[UINavigationController class]]) {
            UINavigationController *navi = (UINavigationController *)topViewController;
            return navi.topViewController;
        }

        return topViewController;
    }
    return self.window.rootViewController;
}

当我按下一个牢房时:

CustomCell.m

- (IBAction)pressOnCell:(id)sender {
    SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:NSStringFromClass([SecondViewController class]) bundle:nil];
    [[AppDelegate shareInstance].currentVisibleController.navigationController pushViewController:secondViewController animated:YES];
}

1 个答案:

答案 0 :(得分:0)

您可以将 pushViewController 中的动画选项设置为NO。或者,您可以在 viewWillDisAppear 上禁用集合视图上的用户互动,然后在 viewWillAppear 中启用它。或者,您可以在 didSelectItemAtIndexPath 中调用 pressOnCell ,并将集合视图的 allowsMultipleSelection 属性设置为NO。