• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iphone - 调用 PopToRootViewController 后如何清理 View Controller ?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 17:21:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个类似于 this question 的问题但它是特定于 MonoTouch 的。当我需要调用 NavigationController.PopToRootViewController() 时,我目前在堆栈上的第 8 个 View Controller 上,我需要清理一堆东西(引用、事件、图像等)在所有弹出的 View Controller 上,我该怎么做?



Best Answer-推荐答案


为了实现这一点,我倾向于将 UINavigationController 子类化,以便在 popToRootViewController 发送到父 View 后拦截所有对它的调用。

popToRootViewController 返回一个 NSArray * 包含所有已从堆栈中弹出的 UIViewController,因此您可以向它们发送清理消息。例如:

@interface BCNavigationController : UINavigationController 
@end

@implementation BCNavigationController


- (NSArray *)popToRootViewControllerAnimatedBOOL)animated {
    NSArray * poppedControllers =  [super popToRootViewControllerAnimated:animated];
    [self sendPoppedMessageToControllers:poppedControllers];
    return poppedControllers;
}

- (UIViewController *) popViewControllerAnimatedBOOL)animated {
    UIViewController * poppedController = [super popViewControllerAnimated:animated];
    [self sendPoppedMessageToControllers:[NSArray arrayWithObject:poppedController]];
    return poppedController;
}

- (NSArray *)popToViewControllerUIViewController *)viewController animatedBOOL)animated {
    NSArray * poppedControllers =  [super popToViewController:viewController animated:animated];
    [self sendPoppedMessageToControllers:poppedControllers];
    return poppedControllers;
}

- (void) sendPoppedMessageToControllersNSArray *)controllers {
    for (UIViewController * controller in controllers )
    {
        if ([controller respondsToSelectorselector(viewWasPoppedOffStack)])
            [controller performSelectorselector(viewWasPoppedOffStack)];
    }
}

@end

...然后,在您的 child UIViewController 中

// MyViewController.m
- (void) viewWasPoppedOffStack  {

// do some cleanup

}

关于iphone - 调用 PopToRootViewController 后如何清理 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324233/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap