【问题标题】:UIView did appear?UIView 确实出现了?
【发布时间】:2011-02-20 23:45:28
【问题描述】:

我想知道,当屏幕上显示特定的UIView 时,有没有办法获得代表或其他东西?

【问题讨论】:

    标签: iphone ios uiview


    【解决方案1】:

    Swift 版本。在你的 UIView 类里面:

    override func willMove(toWindow newWindow: UIWindow?) {
        super.willMove(toWindow: newWindow)
    
        if newWindow == nil {
            // UIView disappear
        } else {
            // UIView appear
        }
    }
    

    【讨论】:

    • 请注意,当视图从屏幕上消失时,这可能会被调用 3 次(首先使用 nil,然后使用窗口,然后再次使用 nil),这可能不是您所期望的,请参阅:stackoverflow.com/questions/34484518/…
    【解决方案2】:

    试试这些:

    – didAddSubview:
    – willRemoveSubview:
    – willMoveToSuperview:
    – didMoveToSuperview
    – willMoveToWindow:
    – didMoveToWindow
    - viewDidAppear:
    

    【讨论】:

    • 在自动布局之后似乎都没有调用这些,因此您无法调整视图的子视图并保留它。
    【解决方案3】:

    如果您直接在 UIView 中管理您的逻辑,请使用:

    - didMoveToSuperview
    

    如果您在 UIViewController 中管理您的逻辑,请使用:

    - viewDidAppear:(BOOL)animated
    

    【讨论】:

      【解决方案4】:

      如果您通过UIViewController 管理UIView,则可以使用-viewDidAppear: 方法:

      - (void) viewDidAppear:(BOOL) animated {
         //do stuff...
         [super viewDidAppear:animated];
      }
      

      【讨论】:

        【解决方案5】:

        确定控件何时出现在屏幕上的另一种方法是继承 View 或 Control 并覆盖 drawRect...

        但是,它在绘制时调用,而不仅仅是在首次显示时调用。所以它只是有时你想要的。它适用于我的情况。一定要打电话给超级! =)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-15
          • 1970-01-01
          • 2018-12-12
          • 2011-08-12
          • 1970-01-01
          • 2020-10-05
          相关资源
          最近更新 更多