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

4

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

尝试在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下的子视图的子视图。苹果文档提到这种设置是不自然的,一些自动通知必须手动完成。与此相同的问题是,没有得到becomeFirstResponder和resignFirstResponder,它们应该与隐藏状态有关吗?
2个回答

3

看来苹果文档是正确的,或者至少提供了一种解决问题的方法。由于我在子视图中没有自动通知,但在主视图中可以收到通知,所以我只需自己“转发”通知:

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

不确定这是否是“正确”的方法,但它能够正常工作。下一个问题,请!


3

一种选择是使用键值观察来观察视图的hidden属性。当变化被触发时,您将收到有关该变化的消息。


只是更新一下:好主意,但我不能使用它,因为从一个选项卡切换到另一个选项卡不会改变隐藏属性。我可以自己更改它,但调用viewWillAppear/viewWillDisappear是更容易的选择。无论如何,谢谢,必须回忆起键值观察! - JOM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接