문제

나는 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 아무것도하지 않습니다. 이것은 이미 완료되었습니다 UIControls, 그러나 켜져 있지 않습니다 UIView에스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top