【问题标题】:Is there any viewDidAppear method for UIView (not UIViewController)?UIView(不是 UIViewController)是否有任何 viewDidAppear 方法?
【发布时间】:2019-05-17 11:54:16
【问题描述】:

我需要了解 UIView 何时出现在屏幕上,所以我需要一个类似于 viewDidAppear 的方法。

我找到了一个 UIView 生命周期:

  1. willMoveToSuperview
  2. invalidateIntrinsicContentSize
  3. didMoveToSuperview
  4. awakeFromNib
  5. willMoveToWindow
  6. 需要更新约束
  7. didMoveToWindow
  8. setNeedsLayout
  9. 更新约束
  10. layoutSubviews
  11. drawRect

我尝试了所有这些方法,但没有得到答案。

【问题讨论】:

  • 不,没有,但您可以使用自定义委托来调用 ViewController 上的 viewDidApppear
  • 没有..没有这样的方法..
  • 嗨 Alexander,viewDidAppearUIViewController 中的方法。如果您分享您想要实现的目标,我们本可以找到合适的解决方案?
  • @LalKrishna,谢谢。我需要一个显示 UIView 已经出现的变量。
  • @AlexanderGalkin - 我为这个问题添加了更多相关标签。请批准编辑。谢谢。

标签: ios uiview uiviewcontroller viewdidload viewdidappear


【解决方案1】:

不,UIView 中没有 viewDidAppear。您可以覆盖 func drawRect 以对 UIView 继承的 View 进行任何您需要的 UI 更改。

SideNote - 如果您希望 drawrect 稍后更新,请致电 setNeedsDisplaysetNeedsDisplay不会立即调用drawRect,而是将接收者的整个边界矩形标记为需要重绘。

换句话说——你永远不应该自己调用drawRect。相反,您告诉系统需要使用 setNeedsDisplay 方法进行绘制,该方法将视图标记为脏。然后在下一个更新周期调用子类的 drawRect 方法。

根据 OP(@Alexander) 的查询,他只需要设置一些变量,因此建议使用以下任何覆盖函数,具体取决于需要执行的操作

  • -(void)didMoveToSuperview - 在视图完成后立即发送 插入到视图层次结构中。

  • -(void)didMoveToWindow - 在视图获得它之后立即发送 窗口属性集。

  • -(void)willMoveToSuperview:(UIView *)newSuperview - 已发送 在视图作为子视图添加到另一个视图之前; newSuperview 可能是 nil 当您从其删除视图时 超级视图。

  • -(void)willMoveToWindow:(UIWindow *)newWindow - 立即发送 在视图(或其父视图)被添加到窗口之前; newWindow 当您从窗口中移除视图时可能为 nil。

【讨论】:

  • 谢谢!我需要一个指示 UIView 出现的变量。如果我重写 func drawRect 并将变量设置为 true,它会正确吗?
  • 虽然这会起作用,但只是设置一个调用 drawRect 的变量并不是一个好主意。为此,您可以使用“willMoveToSuperview”或“didMoveToSuperview”。这个变量的目的是什么?
  • 这个链接很好地描述了每个方法何时被调用。您可以根据自己的目的使用它。 stackoverflow.com/a/4502761/8238512
【解决方案2】:

看,viewDidAppearUIViewController 的方法,它代表 ViewController 的 view 确实出现的时刻,并允许您声明应该发生的事情。

UIView 没有这样的方法。这来自 MVC 模式:在这种情况下,控制器是 UIViewController,它控制更改、操作等,而 view 正是控制器显示的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多