첫 번째 응답자를 한 UIVIEW에서 다른 UIVIEW로 "전송"하는 방법은 무엇입니까?
-
07-07-2019 - |
문제
나는 uiview 서브 클래스가 있습니다 (CustomView
이 질문의 목적을 위해) 모든 사람을 처리하는 자체 처리가 있습니다. touches
이벤트 (시작, 이동, 종료, 취소). 나도 a UIButton
그것은 형제입니다 CustomView
그것은 그것을 겹칩니다.
예를 들어, 내보기 계층 구조는 다음과 같습니다.
- uiview (컨트롤러보기)
- 프레임이있는 CustomView (0, 0, 300, 300)
- 프레임이있는 Uibutton (0, 0, 100, 50)
사용자가 UIBIRTTON에서 끌어 나가면 CustomView가 터치 이벤트를 캡처하기를 원합니다. 디버그 로깅을 통해 UIControlEventTouchDragExit
이벤트는 가로 채기위한 것입니다 (터치가 버튼에서 약 100 픽셀이 떨어질 때까지 발사되지는 않지만이 질문에는 중요하지 않습니다).
이상적으로 드래그 출구 이벤트가 발사되면 버튼이 터치 이동 이벤트 수신을 중단하면 CustomView가 touchesBegan
이벤트 (어떻게 든 스스로 가짜가 필요하더라도), 그리고 모든 미래의 터치 이벤트 (touchesMoved
, 등)는 CustomView로 전송됩니다.
다음을 시도했지만 효과가 없습니다.
-(void)btnTouchDragExit:(id)sender
{
UIButton * btn = sender;
[btn resignFirstResponder];
[customView becomeFirstResponder];
}
나는 기본이라고 생각합니다 UITouch
객체 (터치 이벤트에서 일관된)는 CustomView를 가리키기 위해 다시 타겟팅되지 않습니다. 원하는 효과를 어떻게 달성 할 수 있습니까?
해결책
Hittest : Withevent : "이벤트"가 어떤 견해를 찾아야하는지 파악한 다음 이벤트를 적절한보기로 전달하십시오. 버튼으로 가기 전에 이벤트를 가로 채기 위해 약간의 춤을 추어야 할 수도 있지만, 이것은 hittest : withevent : 만들어진 것입니다.
다른 팁
당신은 무시해야합니다 canBecomeFirstResponder
그렇지 않으면 예를 반환합니다 becomeFirstResponder
아무것도하지 않습니다. 이것은 이미 완료되었습니다 UIControl
s, 그러나 켜져 있지 않습니다 UIView
에스