使属于UIView子类的计时器无效

Fog*_*ter 1 cocoa-touch objective-c uikit uiview ios

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

该类有一个加载它的笔尖,我正在使用ARC.

当UIView要么......我想让计时器无效...

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

我似乎无法在UIView上找到像viewDidDisappear这样的方法.

有没有其他方法来拦截这个?

此时,在弹出ViewController后,计时器会持续触发并创建NSLog输出.

occ*_*lus 5

对于弹出的视图控制器:只使用viewDidDisappear或类似.也UINavigationControllerDelegate有可能有用.

对于视图本身:你尝试过使用willMoveToSuperview:方法UIView吗?我没有验证这一点,但理论上,nil当从超级视图中删除视图时,视图将转移到superview.

因此,请在您的视图中尝试以下操作

- (void)willMoveToSuperview:(UIView *)superview {
    if (!superview) {
        // cancel timers
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一个willRemoveSubview:方法,但是会在superview上调用而不是删除视图.