2011-03-24 3 views
0

나는 터치 민감한 모든 서브 뷰를 가지고 있는데, 서브 뷰에서 슈퍼 뷰로 메시지를 보내 사용자가 선택한 것으로 말하면 슈퍼 뷰는 나머지 컨트롤러와 통신 할 수 있습니다.코코아, UIResponder에서 하위 뷰에서 슈퍼 뷰로 메시지 보내기?

I의 파단과 컨트롤러간에 통신 할 수 있고, 수퍼 파단 >> >> 제어기

아마도 사용 UIResponder이 달성 하는가?

답변

0

하위 뷰에 따라 목표/동작 메커니즘이 좋을 수 있습니다. UIControl에서 하위 뷰를 파생시킬 수 있다면 하위 뷰가 대개 자신의 대상 (target controller) 인 액션 메시지를 보내도록하는 것이 특히 쉽습니다. Interface Builder에서 뷰를 레이아웃하고 뷰 컨트롤러에 뷰를 연결하여 대상 및 동작을 지정할 수 있습니다. UIControl에서 UIControl을 파생시킬 수없는 경우 대상/조치와 동일한 기능을 구현해야하며 IB에서 동일한 지원을받지는 못하지만 여전히 간단합니다.

또 다른 가능성은 뷰 컨트롤러가 모든 하위 뷰에 대한 터치 처리를하도록하는 것입니다. 이것은 기본적으로 당신이 제안한 반응 체인을 활용하지만, 터치 핸들링 수준입니다. 추적 할 하위 뷰가 많이있는 경우에는 적합하지 않을 수도 있지만 작동 가능합니다.

세 번째 방법은 선택한 하위보기에 알림을 게시하는 것입니다.

마찬가지로 UIResponder는 응답자 체인을 따라 임의의 메시지를 전달하는 메커니즘을 제공하지 않습니다. 그 기능을 추가하는 것이 특별히 서브 뷰에서 뷰 컨트롤러로 메시지를 보내는 가장 우아한 방법인지 확신 할 수 없습니다. 보기 컨트롤러와 하위보기 사이에는 잠재적으로 많은 중간 개체가 존재하며 메시지를 보낼 위치를 잘못 알았을 때 전체 체인을 포함합니다. 그러나 UIResponder를 확장하여 리스폰 더 체인을 단순한 이벤트 이상으로 이어주는 통로로 생각하는 것은 흥미 롭습니다. 위의 코드는 완전히 안된

@interface UIResponder (Messages) 
- (void)sendMessage:(SEL)message withObject:(id)object; 
@end; 

@implementation UIResponder (Messages) 
- (void)sendMessage:(SEL)message withObject:(id)object 
{ 
    if ([self respondsToSelector:message]) { 
     [self performSelector:message withObject:object]; 
    } 
    else { 
     [[self nextResponder] sendMessage:message withObject:object]; 
    } 
} 
@end 

경고을, 나는 아직 생각하지 않은 이유 치사한 생각이있을 수 있습니다 : 당신은 UIResponder에 카테고리를 추가 할 수 있습니다. 조심해서 진행해라. 컴파일 오류가 예상됩니다. 손가락을 교차 시키세요. 그것이 잘된다면 나에게 알려주고, 그렇지 않다면 나를 버려둬 라.

0

[self.superview sendMessage]을 사용할 수없는 이유는 무엇입니까?