willMoveToSuperview被调用两次

tes*_*ing 0 uiview ios

我正在向视图控制器添加视图。按照这种观点,我已经实现了willMoveToSuperview。现在,我经历了两次调用此函数:

  1. 将视图添加到超级视图时(按预期)
  2. 当当前视图控制器被关闭时(例如,将新的视图控制器推入导航控制器的堆栈中)

这是预期的行为吗?我还能使用什么其他方法来检测当前视图是否仅添加到超级视图?didMoveToSuperview似乎也一样。还是应该使用一个变量来记住该函数的调用频率?

编辑:

现在我想我找到了它被两次调用的原因。我正在使用hide方法关闭视图。它在里面,C#但在这里不重要:

UIView.Animate (
    0.5, // duration
    () => { Alpha = 0; },
    () => { RemoveFromSuperview(); }
);
Run Code Online (Sandbox Code Playgroud)

如果我对此发表评论,它不会被两次调用。如何保存动画并确保只调用一次?

rob*_*off 5

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

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

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

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