UIView (UIViewController 아님)의 하위보기에서 숨겨진 상태 변경 (또는 다른 변경)을 감지 할 수 있습니까? 이 비동기를 어떻게 든 감지하고 싶습니다.IOS, UIView, Subview의 숨겨진 상태 변경 감지
내 광기에는 이유가 있습니다.
UIView (UIViewController 아님)의 하위보기에서 숨겨진 상태 변경 (또는 다른 변경)을 감지 할 수 있습니까? 이 비동기를 어떻게 든 감지하고 싶습니다.IOS, UIView, Subview의 숨겨진 상태 변경 감지
내 광기에는 이유가 있습니다.
KVO (키 값 관측)를 사용하여 hidden
속성의 값 변경을 감지 할 수 있습니다.
다음과 같은 방법으로 관찰자 (이 예에서는 self
)을 추가
UIView* viewToObserve = [self getViewToObserve]; // implement getViewToObserve
[viewToObserve addObserver:self forKeyPath:@"hidden" options:0 context:NULL];
은 이제 관찰자 클래스에 다음 메서드를 추가 관찰자 메소드가 호출됩니다
- (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
}
}
}
때마다 hidden
속성이 값을 변경합니다. 내가 잘못 본 것이 아니라면, 메소드는 속성을 변경시키는 스레드 컨텍스트에서 동 기적으로 호출됩니다. 비동기 알림이 필요한 경우에는 NSObject
메서드 performSelector:withObject:afterDelay:
또는 performSelector:onThread:withObject:waitUntilDone:
중 하나를 사용하여 직접 추가 할 수 있습니다.
BTW : 관찰자 방법에서는 수표가 필요하지 않습니다. 단 하나의 물체 및/또는 속성 만 관찰하면 분명합니다. 나는 그림을 목적으로 수표를 남겼다. 또한 Apple의 설명서를 KVO 및 KVC (키 값 코딩)으로 읽으면서 여기에서 진행되는 작업을 이해하는 것이 좋습니다.
관찰자의 할당이 해제 되어도 런타임은 계속 관찰자에게 알려주므로 행복합니다. 이 할당 해제되기 전에 그래서 관찰자를 제거하는 것을 잊지 마세요, 늦어도이 일어날해야 관찰자의 dealloc
:
- (void) dealloc
{
UIView* viewToObserve = [self getViewToObserve];
[viewToObserve removeObserver:self forKeyPath:@"hidden"];
[super dealloc];
}
"숨겨진 상태 변경"으로
, 당신은의 값의 변경을 의미합니까 속성'숨겨진'? – herzbube
KVO를 사용하여 각 하위 뷰 (하위 뷰 컬렉션뿐만 아니라 뷰가 추가/제거 된 시점을 알 수 있음)의 숨겨진 속성을 관찰하면 어떨까요? – lnafziger