2017-02-22 8 views
1

지우기 단추가 활성화 된 UITextField가 있습니다.제스처 인식기를 눌러 지우기 단추를 간섭합니다.

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard)) 
tap.cancelsTouchesInView = false 
view.addGestureRecognizer(tap) 

func dismissKeyboard() { 
    view.endEditing(true) 
} 

문제는이 코드 지우기 버튼을 방해한다는 것입니다, 그래서 텍스트 필드가 삭제되지 않습니다 : 사용자가 화면의 아무 곳이나 다른 탭 때 나는 또한 키보드를 일축 일부 코드가 있습니다. 탭 제스처 인식기가 클리어 버튼 탭을 처리하지 못하도록하려면 어떻게합니까?

+0

나는 제스처가 * 뷰 계층하지만 아마 * 따를 것이라고 생각했을 것입니다. 버튼 레이어가 두드려 졌는지 감지 할 수 있습니다. (보기조차도 문제가있을 수 있습니다.) 탭이 무엇인지 알았 으면 프로세스 흐름을 올바르게 지시 할 수 있습니다. – dfd

+0

사용자가 무슨 일을해야할지 잘 모르겠습니까? 버튼이 우선 순위인가, 제스추어인가, 양쪽 모두가 우선인가, 발사하고 있지 않는 경우, IBAction을 수동으로 호출 해, 송신원으로서 버튼을 송신한다. – GregP

+0

버튼이 우선시된다. 또, 화면 상에 또 다른 통상의 UIButton가있어, 제스처 인식기. – user2397282

답변

2

이런 일이 발생하지 않도록하는 방법을 알아 냈습니다.

따라서 지우기 버튼의 유형은 UIButton이므로 제스처 인식기가 해당 탭을 인식하지 못하도록합니다.

이 기능

는 제스처 인식기 탭을 수신 할 때 호출됩니다

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { 
    // Don't handle button taps 
    return !(touch.view is UIButton) 
} 

라인 : 장소 탭 사용자가 그렇지 않으면 UIButton 및 사실 경우

return !(touch.view is UIButton) 

는 false를 돌려줍니다.

그래서 false = 제스처 인식기가 탭을 처리하지 않으며 true = 탭이 처리됩니다.

UIGestureRecognizerDelegate을 추가하고 다음 줄을 사용하여 설정하는 것을 잊지 마십시오

tap.delegate = self 
관련 문제