我正在向视图控制器添加视图。在此视图中,我已经实现了willMoveToSuperview
。现在,我经历了两次调用此函数:
将视图添加到超级视图时(按预期)
取消当前视图控制器后(例如,将新的视图控制器推入导航控制器的堆栈中)
这是预期的行为吗?我还能使用什么其他方法来检测是否仅将当前视图添加到超级视图? didMoveToSuperview
似乎也是如此。还是应该使用一个变量来记住函数被调用的频率?
编辑:
现在我想我找到了它被两次调用的原因。我正在使用hide方法关闭视图。它在C#
中,但在这里无关紧要:
UIView.Animate (
0.5, // duration
() => { Alpha = 0; },
() => { RemoveFromSuperview(); }
);
如果我对此发表评论,它不会被两次调用。如何保留动画并确保只调用一次?
最佳答案
将视图添加到超级视图时,系统将willMoveToSuperview:
发送到该视图。参数是新的超级视图。
从超级视图中删除视图时,系统将willMoveToSuperview:
发送到该视图。参数为nil。
从超级视图中删除视图时,不能阻止系统发送willMoveToSuperview:
,但是可以检查参数:
- (void)willMoveToSuperview:(UIView *)newSuperview {
if (newSuperview != nil) {
// not a removeFromSuperview situation
}
}