2

我制作了一个推送 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 仍在动画,请等到它在后台完成并在当前线程执行此块。

那种事。

4

1 回答 1

3

您需要使用UINavigationController的委托:

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

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

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

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

文档

UINavigationController
UINavigationControllerDelegate

于 2013-04-12T10:45:54.173 回答