当视图不再位于视图堆栈顶部时的事件
Posted
技术标签:
【中文标题】当视图不再位于视图堆栈顶部时的事件【英文标题】:Event for when a view is no longer on top of the view stack 【发布时间】:2014-09-23 15:08:03 【问题描述】:有没有办法判断视图何时不再位于视图堆栈顶部?例如,模态视图被推到视图堆栈的顶部?
所以我有一个带有表格视图的视图,并且有一些事件会导致显示模式。当模式被解除时,我想重新加载表中的数据。
是否有我可以订阅的事件来实现这一目标?也许这可以通过 KVO 实现?
【问题讨论】:
【参考方案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 和其他系统框架中声明的复杂视图,任何 视图的子视图通常被认为是私有的并且受制于 随时改变。因此,您不应尝试检索或 修改这些类型的系统提供的视图的子视图。如果你这样做, 您的代码可能会在未来的系统更新期间中断。
【讨论】:
以上是关于当视图不再位于视图堆栈顶部时的事件的主要内容,如果未能解决你的问题,请参考以下文章