如何确保UINavigationController在弹出另一个之前完成动画?

时间:2013-04-12 10:36:49

标签: objective-c uinavigationcontroller

我制作推送uinavigationcontroller的程序。一旦完成它就会弹回来然后再做一些事情。

它想做的其中一件事就是等到它完成之后才会弹出来。

这是因为它可能做的一件事就是推送另一个viewcontroller。

我该怎么做?

I already create a category 

-(void)SafelyPushController:(UIViewController *) pushee
{
    AssertMainThread;
    if([self.viewControllers lastObject]!=pushee){
        [self pushViewController:pushee animated:YES];
        while (false);
    }
    else{
        //DLog(@"Dont need to pushview");
    }


    while (false);
    //[self pushViewController:pushee animated:YES];
}

为了防止某些情况。

我需要更一般的解决方案。

类似的东西:

如果navigationController仍然是动画,请等到它在后台完成并在当前线程处执行此块。

那种事。

1 个答案:

答案 0 :(得分:3)

您需要使用 UINavigationController 的委托:

@property(nonatomic, assign) id<UINavigationControllerDelegate> delegate;

将其设置为符合此协议的类的对象,该协议实现此方法:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

在此方法中,您将知道何时完成了视图控制器的显示,因此如果它已设置动画,则动画已结束。请注意,如果您推送多个视图控制器,则必须跟踪它们。

文档

UINavigationController
UINavigationControllerDelegate