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

发布于 2024-08-21 20:57:44 字数 589 浏览 6 评论 0原文

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

尝试将断点设置为 viewDidLoad、viewDidUnload、viewWillAppear、viewWillDisappear、viewDidDisappear、becomeFirstResponder 和 resignFirstResponder。没有什么。当我设置隐藏=是/否时,这些都不会被调用。

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

我自己调用 viewWillAppear,因为该视图是... UITabBarItem 下视图的子视图的子视图。苹果文档称该设置不自然,一些自动通知必须手动完成。这是否与未获得 bebeFirstResponder 和 resignFirstResponder 相同的问题,它们应该与隐藏状态相关?

I am switching between two views by toggling hidden attributes. How would I know when one view gets hidden and/or visible?

Tried setting break points into viewDidLoad, viewDidUnload, viewWillAppear, viewWillDisappear, viewDidDisappear, becomeFirstResponder and resignFirstResponder. Nothing. None of those are called, when I set hidden = YES/NO.

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

I call viewWillAppear by myself, since that view is... subview of subview of view under UITabBarItem. Apple docs told that the setup is unnatural and some automatic notifications have to be done manually. Is this the same problem with not getting becomeFirstResponder and resignFirstResponder which are supposed to be related to hidden status?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

漫漫岁月 2024-08-28 20:57:44

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

One option is to use Key-Value Observation to observe the hidden property of either views. When the change is triggered, you'll get a message about the change.

分分钟 2024-08-28 20:57:44

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

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

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

Guess Apple docs were right - or at least offered one way to solve the problem. Since I don't get automatic notifications in subViews, but I do get them in mainView, I just "forward" the notifications by myself:

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

Not sure, if this is the "right" way, but it works. Next problem, please!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文