如果在iOS应用程序中更改了视图层次结构,如何收到通知

时间:2016-01-13 09:21:39

标签: objective-c uikit

是否可以在没有缓存的情况下检测视图层次结构中是否有某些更改并一次又一次地比较整个视图层次结构?是否有全局通知或类似内容,表示视图已删除或添加到当前层次结构中?

目前我们正在使用一个Timer来触发一个方法,该方法负责检测屏幕上的特定UI-Element。但这是昂贵的方式。

我知道有一个名为willMoveToSuperView的方法,我可以在我的UIView baseClass中覆盖它来触发事件或类似的事情。但是,我认为这不是解决问题的优雅方式,因为它需要大量的重构来简化"像这样的任务。

所以我的最后一个问题是: 是否有一种高效的方法来检测视图层次结构中的更改?

1 个答案:

答案 0 :(得分:-2)

这似乎是NSNotificationCenter的工作。

在希望了解层次结构更改时间的ViewController中,添加

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hierarchyChanged:) name:YourHierarchyChangedNotificationName object:nil];

在您看来,添加后,您可以在willMoveToSuperView或代码中的任何位置添加通知帖子,添加通知帖子。

[[NSNotificationCenter defaultCenter] postNotificationName:YourHierarchyChangedNotificationName object:nil userInfo:nil];

由于您不想添加大量代码来跟踪委派或缓存整个层次结构,因此这对您来说似乎是一个理想的解决方案。您还可以在通知帖子中发送nil以外的更多信息。记得在取消分配viewController时删除观察者。

[[NSNotificationCenter defaultCenter] removeObserver:self];