OGeek|极客世界-中国程序员成长平台

标题: iphone - 调用 PopToRootViewController 后如何清理 View Controller ? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 17:21
标题: iphone - 调用 PopToRootViewController 后如何清理 View Controller ?

我有一个类似于 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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4