4

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

尝试将断点设置为 viewDidLoad、viewDidUnload、viewWillAppear、viewWillDisappear、viewDidDisappear、becomingFirstResponder 和 resignFirstResponder。没有什么。当我设置隐藏 = 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 是否存在同样的问题?

4

2 回答 2

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

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

于 2010-02-18T15:31:28.483 回答
3

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

于 2010-02-18T15:28:33.823 回答