【问题标题】:How to know when UIView becomes completely hidden?如何知道 UIView 何时完全隐藏?
【发布时间】:2011-01-18 08:53:27
【问题描述】:

通过切换隐藏属性在两个视图之间切换。我怎么知道一个视图何时被隐藏和/或可见?

尝试将断点设置为 viewDidLoad、viewDidUnload、viewWillAppear、viewWillDisappear、viewDidDisappear、becomingFirstResponder 和 resignFirstResponder。没有。当我设置 hidden = YES/NO 时,这些都不会被调用。

if (self.aController)
    self.aController.view.hidden = YES;
if (self.bController)
    self.bController.view.hidden = NO;
[self.bController viewWillAppear:YES];

我自己调用 viewWillAppear,因为该视图是... UITabBarItem 下视图的子视图的子视图。 Apple 文档告诉该设置是不自然的,一些自动通知必须手动完成。没有得到本应与隐藏状态相关的 becomeFirstResponder 和 resignFirstResponder 是否也是同样的问题?

【问题讨论】:

    标签: iphone uiview uiviewcontroller uiresponder


    【解决方案1】:

    一种选择是使用Key-Value Observation 观察任一视图的hidden 属性。触发更改后,您将收到有关更改的消息。

    【讨论】:

    • 只是为了更新:好主意,但我不能使用它,因为从一个选项卡切换到另一个选项卡不会更改隐藏属性。我可以自己更改它,但调用 viewWillAppear/viewWillDisappear 是更容易的选择。无论如何,还是要感谢 Key-Value Observation!
    【解决方案2】:

    猜测 Apple 文档是对的 - 或者至少提供了一种解决问题的方法。由于我没有在 subViews 中收到自动通知,但我确实在 mainView 中收到了它们,我只是自己“转发”通知:

    - (void) viewWillAppear:(BOOL)animated
    {
    [super viewWillAppear:animated];
    
    // called at tab switch
    if (self.aController)
        [self.aController viewWillAppear:YES];
    if (self.bController)
        [self.bController viewWillAppear:YES];
    }
    
    - (void) viewWillDisappear:(BOOL)animated
    {
    [super viewWillDisappear:animated];
    
    // called at tab switch
    if (self.aController)
        [self.aController viewWillDisappear:YES];
    if (self.bController)
        [self.bController viewWillDisappear:YES];
    }
    

    不确定,如果这是“正确”的方式,但它有效。下一个问题,拜托!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 2011-08-16
      相关资源
      最近更新 更多