如何知道UIView何时被完全隐藏?

时间:2010-02-18 14:56:05

标签: iphone uiview uiviewcontroller uiresponder

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

尝试将断点设置为viewDidLoad,viewDidUnload,viewWillAppear,viewWillDisappear,viewDidDisappear,becomeFirstResponder和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文档告诉设置不自然,一些自动通知必须手动完成。如果没有得到与隐藏状态相关的yesFirstResponder和resignFirstResponder这是同样的问题吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

猜猜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];
}

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