【问题标题】:Event for when a view is no longer on top of the view stack当视图不再位于视图堆栈顶部时的事件
【发布时间】:2014-09-23 15:08:03
【问题描述】:

有没有办法判断视图何时不再位于视图堆栈顶部?例如,模态视图被推到视图堆栈的顶部?

所以我有一个带有表格视图的视图,并且有一些事件会导致显示模式。当模式被解除时,我想重新加载表中的数据。

是否有我可以订阅的事件来实现这一目标?也许这可以通过 KVO 实现?

【问题讨论】:

    标签: ios objective-c uiview uiviewcontroller uikit


    【解决方案1】:

    您可以使用 NSNotification 系统。

    在您的 UITableViewController 中,您将注册 NSNotification(假设 NSString *notifName = @"dismissmv"):

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hasDismissed:) notifName object:nil];
    

    并实施

    -(void)hasDismissed:(NSNotification *)notification
    

    然后,当您关闭视图控制器时,您将发布通知:

        [self dismissViewControllerAnimated:true completion:^{[[NSNotificationCenter defaultCenter] postNotificationName:notifName object:nil];}];
    

    【讨论】:

    • 我想到了类似的东西,但是我必须在我显示的每个视图控制器中手动发布通知。展示了几种不同的模式,未来可能会添加更多模式。我最终使用了在我感兴趣的数据发生变化时发布的自定义通知。
    【解决方案2】:

    您可以使用其subviews 属性在容器视图中找到子视图的顺序。

    来自文档:

    @property(nonatomic, readonly, copy) NSArray *subviews

    讨论

    您可以使用此属性来检索与 您的自定义视图层次结构。数组中子视图的顺序 反映它们在屏幕上的可见顺序,视图位于索引 0 是最后面的视图。

    对于在 UIKit 和其他系统框架中声明的复杂视图,任何 视图的子视图通常被认为是私有的并且受制于 随时改变。因此,您不应尝试检索或 修改这些类型的系统提供的视图的子视图。如果你这样做, 您的代码可能会在未来的系统更新期间中断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多