UIViewController连续push、pop的正确做法

来源:互联网 发布:maya导入unity3d 编辑:程序博客网 时间:2024/04/29 21:07

正确的做法是把 连续的push放在上一个push结束回调 navigationController:didShowViewController:animated:进行


@interface PbNavigationController : UINavigationController <UINavigationControllerDelegate>@property (nonatomic,copy) dispatch_block_t completionBlock;@property (nonatomic,strong) UIViewController * pushedVC;@end@implementation PbNavigationController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        self.delegate = self;    }    return self;}- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {    NSLog(@"didShowViewController:%@", viewController);    if (self.completionBlock && self.pushedVC == viewController) {        self.completionBlock();    }    self.completionBlock = nil;    self.pushedVC = nil;}-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {    if (self.pushedVC != viewController) {        self.pushedVC = nil;        self.completionBlock = nil;    }}-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated completion:(dispatch_block_t)completion {    self.pushedVC = viewController;    self.completionBlock = completion;    [self pushViewController:viewController animated:animated];}@end


see also:

http://stackoverflow.com/questions/7674958/when-using-a-uinavigationcontroller-the-viewwillappear-or-viewdidappear-methods

http://stackoverflow.com/questions/22045098/didshowviewcontroller-not-being-called-after-viewdidappear


0 0
原创粉丝点击