当前位置 : 主页 > 手机开发 > ios >

ios – 如何在视图控制器弹出或推入导航控制器堆栈时获取通知

来源:互联网 收集:自由互联 发布时间:2021-06-11
我希望在视图控制器弹出或推入导航控制器堆栈时收到通知. 我试着用 - (void)setViewControllers:(NSArray *)viewControllers 但我失败了. 而且我不想使用委托方法来实现这一点…… 您可以继承UIN
我希望在视图控制器弹出或推入导航控制器堆栈时收到通知.
我试着用

- (void)setViewControllers:(NSArray *)viewControllers

但我失败了.
而且我不想使用委托方法来实现这一点……

您可以继承UINavigationController并覆盖一些方法:

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"poped" object:nil userInfo:@{}];
    return [super popToRootViewControllerAnimated:animated];
}

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"poped" object:nil userInfo:@{}];
    return [super popToViewController:viewController animated:animated];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"poped" object:nil userInfo:@{}];
    return [super popViewControllerAnimated:animated];
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"pushed" object:nil userInfo:@{}];
    return [super pushViewController:viewController animated:animated];
}

我留下了像@ {}这样的用户信息,但是你可以放置一些东西,如你想要的那样,就像添加或删除的控制器一样.

我不知道,但我认为你应该三思而后行,如果你的架构需要通知这种情况.

此外,您必须检查pop方法是否相互调用,在这种情况下,您可以获得一个pop的一些通知.

网友评论