2009-11-21 6 views
0

UIViewController가 있고 뷰에 두 개의 하위 뷰를 추가했습니다. 하나의 하위 뷰는 UIViewController의 뷰입니다. 다른 하위 뷰는 UITextField입니다.서브 뷰 터치 이벤트 잡기

사용자가 다른보기를 터치 할 때 UITextField에 대한 키보드를 닫을 필요가 있지만 이러한 이벤트를 감지하는 방법을 알아낼 수 없습니다. UIViewController의 tableView가 UIViewController를 잡아내어 UIResponder 체인을 깨뜨리므로 내 UIViewController는 결코 그 정보를 듣지 않습니다. 계층 구조의 모든 것을 하위 클래스로 묶어서 체인을 따라 이벤트를 전달할 수는 없으므로 내 옵션은 무엇입니까?

프로그래밍 방식으로 모든 작업을 수행하고 있음을 언급해야합니다. IB가 아닙니다.

감사합니다.

답변

3

그래서 파고 들어가면 나는 다른 방법이 있다고 생각하지 않습니다. 리스폰 더 체인은 터치 이벤트를받은 UIView로 시작하고, 잡히지 않은 경우 해당보기의 컨트롤러로, 그런 다음 수퍼 뷰로 전달됩니다.

명백히 UITableView의 모든 UIView 요소를 서브 클래 싱하는 것은이 상황에 대한 미친 과잉입니다.

내가 한 것은 내 테이블보기와 동일한 프레임 크기로 투명한 "터치 실드"보기를 만드는 것입니다. 키보드가 펼쳐지면이 뷰를 내 테이블에 추가하고 접을 때 테이블을 제거합니다. 이렇게하면 내가 테이블을 치기 전에 그 접촉을 차단할 수 있습니다.

+0

하지만 터치를 가로 채기 위해 어떻게 설정 했습니까? 그렇게하면 터치가 곧바로 통과합니다. – jowie

+0

@Joe Wibble - UIView의 userInteractionEnabled 속성을 "YES"로 설정해야 할 수도 있습니다. 테이블 뷰에 추가되고 일부 영역을 덮는다면 터치를 가로 챌 것입니다. – DougW