UIView是否有任何viewDidAppear方法(不是UIViewController)?

时间:2018-12-17 06:06:58

标签: ios uiview uiviewcontroller viewdidload viewdidappear

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

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

  1. willMoveToSuperview
  2. invalidateIntrinsicContentSize
  3. didMoveToSuperview
  4. awakeFromNib
  5. willMoveToWindow
  6. needsUpdateConstraints
  7. didMoveToWindow
  8. setNeedsLayout
  9. updateConstraints
  10. layoutSubviews
  11. drawRect

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

2 个答案:

答案 0 :(得分:5)

viewDidAppear中没有UIView。您可以覆盖功能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 当您从窗口中删除视图时,它可能为零。

答案 1 :(得分:1)

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

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