willMoveToSuperview被调用两次

时间:2014-09-23 13:51:25

标签: ios uiview

我正在向视图控制器添加视图。在此视图中,我实现了willMoveToSuperview。现在我体验到这个函数被调用了两次:

  1. 将视图添加到superview(按预期)
  2. 当前视图控制器被解除时(例如,在导航控制器的堆栈上按下新视图控制器)
  3. 这是预期的行为吗?我还可以使用哪种方法来检测当前视图是否仅添加到超级视图中? didMoveToSuperview似乎也是如此。或者我应该使用一个记住函数调用频率的变量吗?

    修改

    现在我想我找到了它被调用两次的原因。我使用隐藏方法来关闭视图。它在C#中,但它不应该在这里:

    UIView.Animate (
        0.5, // duration
        () => { Alpha = 0; },
        () => { RemoveFromSuperview(); }
    );
    

    如果我发表评论,它就不会被叫两次。如何保留动画并确保仅调用一次?

1 个答案:

答案 0 :(得分:4)

将视图添加到超级视图时,系统会将willMoveToSuperview:发送到视图。该参数是新的超级视图。

从超级视图中删除视图时,系统会将willMoveToSuperview:发送到视图。参数为零。

从超级视图中删除视图时,无法阻止系统发送willMoveToSuperview:,但您可以检查参数:

- (void)willMoveToSuperview:(UIView *)newSuperview {
    if (newSuperview != nil) {
        // not a removeFromSuperview situation
    }
}