ios - willMoveToSuperview 被调用了两次

标签 ios uiview

我正在向我的 View Controller 添加一个 View 。在这个 View 中,我已经实现了 willMoveToSuperview。现在我体验到这个函数被调用了两次:

  1. 当 View 被添加到父 View 时(如预期的那样)
  2. 当当前 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/

相关文章:

iOS DDMathParser 获取字符串中出现的任何 (...)

iphone - 如何在没有已知框架的情况下初始化 View ?

arrays - 如何正确设置 for 循环以每侧显示 1 个图像

objective-c - UITabBar 重叠它的 View

ios - 在 Objective C 中不使用 switch 语句显示评级图像的最佳实践

ios - 相机图像方向

ios - 快速拖动 subview 以删除特定位置

ios - setNeedsDisplay 是立即生效还是仅在稍后排队?

iphone - cocos2d-x 创建 CCMenuItem 报错

ios - Swift iOS - 如何让键盘在显示 SearchController 的同时显示自身?