【问题标题】:Invalidate a timer that belongs to a UIView subclass使属于 UIView 子类的计时器无效
【发布时间】:2013-02-04 11:55:13
【问题描述】:

我有一个属于 UIView 子类的重复计时器。

该类有一个可以加载它的 nib,我正在使用 ARC。

当 UIView 是...时,我想使计时器无效...

  1. 已从其超级视图中删除
  2. 包含其 superView 的 ViewController 从堆栈中弹出。

我似乎在 UIView 上找不到类似 viewDidDisappear 的方法。

还有其他方法可以拦截吗?

目前,在 ViewController 弹出后,计时器不断触发并创建 NSLog 输出。

【问题讨论】:

    标签: ios objective-c cocoa-touch uiview uikit


    【解决方案1】:

    对于弹出的视图控制器:只需使用viewDidDisappear 或类似名称。还有UINavigationControllerDelegate 可能有用。

    对于视图本身:您是否尝试过在UIView 中使用willMoveToSuperview: 方法?我尚未对此进行验证,但理论上,当视图从其父视图中删除时,该视图将移至父视图 nil

    所以在你的观点中尝试以下方法:

    - (void)willMoveToSuperview:(UIView *)superview {
        if (!superview) {
            // cancel timers
        }
    }
    

    还有一个willRemoveSubview: 方法,但它会在父视图上调用,而不是被删除的视图。

    【讨论】:

      【解决方案2】:

      您是否尝试过在dealloc 中使其无效

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-27
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多