ort*_*t11 11 subview uiview ios
无论如何,在UIView(不是UIViewController)的子视图中检测隐藏状态更改(或其他更改).想以某种方式检测这种异步.
我有疯狂的原因.
her*_*ube 17
您可以使用KVO(键值观察)来检测属性值的更改hidden.
self以下列方式添加您的观察者(在此示例中):
UIView* viewToObserve = [self getViewToObserve]; // implement getViewToObserve
[viewToObserve addObserver:self forKeyPath:@"hidden" options:0 context:NULL];
Run Code Online (Sandbox Code Playgroud)
现在将以下方法添加到您的观察者类:
- (void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context
{
UIView* viewToObserve = [self getViewToObserve];
if (object == viewToObserve)
{
if ([keyPath isEqualToString:@"hidden"])
{
// react to state change
}
}
}
Run Code Online (Sandbox Code Playgroud)
只要hidden属性更改其值,就会调用observer方法.如果我没有弄错的话,将在进行属性更改的线程的上下文中同步调用该方法.如果您需要异步通知,可以自己添加,例如使用其中一种NSObject方法performSelector:withObject:afterDelay:或performSelector:onThread:withObject:waitUntilDone:.
顺便说一句:如果您只观察单个对象和/或属性,显然您不需要使用观察者方法进行检查.为了便于说明,我把支票留了下来.我还建议阅读Apple关于KVO和KVC(键值编码)的文档,以了解这里发生了什么.
即使观察者被解除分配,运行时也会继续通知您的观察者 - 导致应用程序崩溃!所以不要忘记在取消分配之前移除观察者,最迟这应该发生在观察者的dealloc:
- (void) dealloc
{
UIView* viewToObserve = [self getViewToObserve];
[viewToObserve removeObserver:self forKeyPath:@"hidden"];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6765 次 |
| 最近记录: |