몇 가지 제스처 인식기가 첨부 된 자체 전체 화면 콘텐츠보기를 관리하는 컨테이너보기 컨트롤러가 있습니다. 하위보기 컨트롤러는 화면의 일부에 오버레이 될 수 있습니다. 루트 뷰는 스택 뷰의 복잡한 뷰 계층을 포함하는 UIScrollView로 덮여있는 불투명 한 배경색을 제공하는 UIView입니다.자식보기 컨트롤러에서 처리되지 않은 터치 이벤트가 컨테이너보기로 전달되지 않도록 방지
아이의 스크롤링은 사용자 상호 작용뿐만 아니라 올바르게 작동합니다. 그것의 subviews와. 내가 겪고있는 문제는 스크롤 뷰 자체 (즉, 서브 뷰 내부가 아닌)의 탭 또는 기타 비 스크롤 동작이 빈 UIView를 통해 빠져 나오고 루트 뷰의 제스처 인식기가 예기치 않게 처리한다는 것입니다. 상위 (컨테이너) 컨트롤러의 나는 그 접촉을 무시하거나 취소하기 위해 그 아이의 배경을 삼켜 버리기를 원합니다.
첫 번째 생각은 터치 이벤트가 수퍼 뷰로 전달되는 것을 방지한다고 가정 할 때 자식 VC에서 nextResponder
을 재정의하여 nil을 반환하는 것이 었습니다. 아무런 성공도 없었으므로 자식 컨트롤러에서 터치 처리 메서드 (touchesBegan:
등)를 재정의하려고했지만 결코 호출되지 않았습니다. 그런 다음 간단한 UIView 하위 클래스를 내 자식 컨트롤러의 루트보기로 대체했습니다. 마찬가지로이 두 가지 방법을 대신 사용하려고했습니다. nextResponder에 대해 nil을 다시 반환해도 아무 효과가 없으며 터치 메서드가 호출되지 않습니다.
내 응답기 체인은 스크롤 뷰 -> 자식 VC의 루트보기 -> 자식 VC -> 부모의 루트보기 -> 상위 VC로 정확하게 설정되어있는 것 같습니다. 그게 내 컨트롤러 봉쇄가 올바르게 설정되었다고 생각하게 만들고 부모의 루트보기에있는 제스처 인식기가 어떻게 든 이해하지 못하는 방식으로 응답 체인에서 우위를 차지하는 것으로 의심하게 만듭니다.
이것은 쉬운 것처럼 보입니다. 내가 뭘 놓치고 있니? 감사!
당신의 물건의 그래픽 표현이 도움이 될 것입니다. 또는 프로젝트 데모 :) 또는 몇 줄의 코드 – Jageen
자식 컨트롤러의 루트보기로 "대체 된"UIView가 true로 설정된 사용자 상호 작용을 사용하도록 설정했는지 확인하십시오 –
Thanks @SandeepBhandari, I 바닐라 UIView를 사용할 때와 내 하위 클래스를 사용할 때 사용자 상호 작용이 활성화되었습니다. 나는 그것을 해제하는 것으로 실험했다. (체인을 감추는 것을 막기 위해 필요한 생각일지도 모르겠다.)하지만 그것은 모든 하위 뷰에 대한 사용자 상호 작용을 없앤다 (내 스크롤보기 등). – 4bar