繁体   English   中英

在viewDidAppear之后没有调用didShowViewController

[英]didShowViewController not being called after viewDidAppear

我在自定义导航控制器子类上使用UINavigationController委托方法来提供特殊的UI行为。 不幸的是,在某些情况下,即使该视图变为可见,在推送视图后我也没有收到didShowViewController回调。

我收到了一些委托调用,并且在大多数情况下都可以正常工作-仅在应用程序中使用特定的View控制器时,我才能看到此行为。

因此,在创建了一些测试之后,我发现问题可能是由didAppear或willAppear方法中的另一个视图控制器引起的。 后者似乎很好,但是在viewDidAppear之后缺少对didShowViewController的调用对我来说似乎是个错误。

为避免此问题,您可以在UINavigationController的子类中创建一个完成块来推送视图控制器,并且仅在推送完成后才启动被推送的视图控制器。 可能与此类似: UINavigationController的完成处理程序“ pushViewController: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

您可能还可以做更多的工作来同步完成块和pushVC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM