2013-04-12 26 views
2

我制作了一个推送uinavigationcontroller的程序。一旦完成,它会弹出一些东西,然后做一些事情。如何确保UINavigationController在弹出另一个之前已完成动画效果?

它想要做的事情之一是等到它完成之前弹出一些东西。

这是因为它可能做的一件事是推动另一个视图控制器。

我该怎么做?

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仍然动画,等到它在后台完成,在当前线程执行此块。

那样的事情。

+0

不能使用navigationController:didShowViewController:动画:在UINavigationControllerDelegate检查时动画结束? – pasine

回答

3

您需要使用UINavigationController的的委托:

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

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

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

在这方法,当你完成显示视图控制器时你会知道,因此如果它是动画的,动画已经结束。请注意,如果您推送多个视图控制器,则必须跟踪它们。

文档

UINavigationController
UINavigationControllerDelegate

相关问题