2011-11-14 4 views
4

내가 3 UIViews가스태킹 UITableViews은보기 아래에 터치 이벤트를 전달하지 않습니다

의 TableView는 하단의 상단과 rootView에 또 다른

jQuery과
planeView
rootView 위에 하나를 쌓아 데. 나는이 기능은 즉의 TableView 상단 가장보기 터치 할 때 호출되거나 이동 될 것으로 기대

/*code in rootView*/ 



- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {} 

rootView에 다음 코드를 구현 한

(의 TableView가 그 위에 그대로 rootView이 표시되지 않습니다) , 반대로 함수 중 아무 것도 호출되지 않았습니다. 그것이 그렇게 예상대로 rootView 방법이

/*code in TableView so that the rootView methods are called(TableView is the subview of rootView)*/ 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
[super touchesBegan:touches withEvent:event]; 
[self.superview touchesBegan:touches withEvent:event]; 
} 

이라고 있도록

는 또한있는 TableView에 다음 코드를 넣어 시도했지만 문제는

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  

같이있는 TableView의 대표가 아니라는 것이다 라는.

TableView 클래스 (didSelectRow :) 및 touchesBegan :에 구현 된 TableView 대리인을 보장 할 수있는 방법이 있습니까? touchesMoved .. rootView의 함수도 적절하게 호출됩니까?

즉 TableView를 클릭하면 -> TableView에서 (didSelectRow : atIndex) 함수가 -> rootView에서 (touchesBegan 및 touchesEnd) 메소드가 호출됩니다. UITableView의 하위 클래스에서

답변

5

이 같은 터치 방법이 있어야합니다

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.nextResponder touchesBegan:touches withEvent:event]; 
    [super touchesBegan:touches withEvent:event]; 
} 

여기의 차이는 대신 수퍼의 다음 응답에 터치를 전달하는, 당신은이 일을하고 있다는 것입니다 전에 슈퍼 터치를 전달합니다.

그런 다음 planeView에서이 같은 감동을 전달해야

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.superview touchesBegan:touches withEvent:event]; 
} 

가 예상대로이 여전히 정확히 작동하지 않을 수 있음을 유의하십시오. UITableView은 후드 아래 응답 체인의 많은 mangling을합니다. 마치 실제로 서브 뷰의 복잡한 컬렉션 인 UITableView이 버튼이나 라벨과 같은 또 다른 뷰일 것입니다.

+0

위대한 해상도. 도움을 감사합니다. – prajul

+0

하지만 여전히 특정 시점에서 끝까지 : 호출되지 않습니다. touchesEnded : 메시지에서 뷰 위치를 조정했지만 메시지가 전달되지 않았기 때문에 항상 뷰 조정이 내가 기대했던대로 작동하지 않아. – prajul

+0

@prajul : 예, 현재 비슷한 문제로 씨름하고 있습니다. 테이블보기는 정말 복잡한 짐승입니다. 기본 접촉을 사용하는 것에 따라, 내가 시도한 또 다른 것은 테이블 뷰 상단에 완전히 투명한 UIView를 배치하는 것입니다. 위의 코드처럼 터치를 통과해도 테이블보기는 여전히 제대로 작동하지 않습니다 (클릭 만 할 수 있지만 스크롤 할 수는 없습니다). 그러나, 대신에'hitTest : withEvent :'를 통과한다면, 테이블 뷰는 정상적으로 작동 할 것이고, 오버레이 uiview에서 초기 hitTest를 사용하여 버튼이나 어떤 것을 클릭하는 것과 같은 일을 할 수 있습니다. – MusiGenesis

관련 문제