我制作推送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仍然是动画,请等到它在后台完成并在当前线程处执行此块。
那种事。
答案 0 :(得分:3)
您需要使用 UINavigationController 的委托:
@property(nonatomic, assign) id<UINavigationControllerDelegate> delegate;
将其设置为符合此协议的类的对象,该协议实现此方法:
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
在此方法中,您将知道何时完成了视图控制器的显示,因此如果它已设置动画,则动画已结束。请注意,如果您推送多个视图控制器,则必须跟踪它们。
文档: