我正在向我的 View Controller 添加一个 View 。在这个 View 中,我已经实现了 willMoveToSuperview
。现在我体验到这个函数被调用了两次:
- 当 View 被添加到父 View 时(如预期的那样)
- 当当前 View Controller 被关闭时(例如,一个新的 View Controller 被压入导航 Controller 的堆栈)
这是预期的行为吗?我可以使用什么其他方法来检测当前 View 是否仅添加到 super View ? didMoveToSuperview
似乎也是这样做的。或者我应该使用一个变量来记住函数被调用的频率?
编辑:
现在我想我找到了它被调用两次的原因。我正在使用隐藏 方法来关闭 View 。它在 C#
中,但在这里应该无关紧要:
UIView.Animate (
0.5, // duration
() => { Alpha = 0; },
() => { RemoveFromSuperview(); }
);
如果我注释掉它,它就不会被调用两次。如何保留动画并确保它只被调用一次?
最佳答案
当一个 View 被添加到一个父 View 时,系统发送willMoveToSuperview:
给 View 。参数是新的父 View 。
当一个 View 从父 View 中移除时,系统发送willMoveToSuperview:
到 View 。参数为nil。
当你从父 View 中移除 View 时,你不能阻止系统发送willMoveToSuperview:
,但你可以检查参数:
- (void)willMoveToSuperview:(UIView *)newSuperview {
if (newSuperview != nil) {
// not a removeFromSuperview situation
}
}
关于ios - willMoveToSuperview 被调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996906/