2011-12-04 4 views
15

저는 모달 폼 시트 (iPad)로 테이블보기를 가지고 있으며, 셀 중 하나에 UITextField가 있습니다. 내보기 컨트롤러 텍스트 필드에 대한 참조를 보유하고 또한 해당 대리자입니다.UITextField의 키보드가 닫히지 않습니다. 아니요, 실제로

텍스트 필드가 Return을 히트하면 -resignFirstResponder 안에 -textFieldShouldReturn:으로 알려줍니다. 다른 경우에는 편집을 끝내도록 강요하고 싶기 때문에 전체 표보기를 -endEditing:YES으로 말합니다. 그런 다음 텍스트 필드에 대한 로컬 참조를 해제하고 행을 다시로드하여 다른 것으로 바꿉니다.

키보드는 어느 경우에도 사라지지 않습니다. 나는 무엇이 잘못되었는지 알지 못하며 더 디버깅하는 방법을 모르겠습니다. 필자는 다른 텍스트 편집 작업에서 끈적한 키보드 문제를 경험하지 못했습니다. firstResponder 사임은 항상 예상대로 작동합니다.

의견이 있으십니까? 감사.

+0

코드가 실행됩니까? 올바른 텍스트 필드에서 resignFirstResponder를 호출합니까? – Eiko

+0

예. 나는'isFirstResponder'가 textField에서 YES라는 것을 보증했습니다. 나는 그것을 호출하기 바로 전에'-resignFirstResponder'를 호출했습니다. –

답변

11

-disablesAutomaticKeyboardDismissal을 구현하고 NO를 반환하십시오. 은 iOS 6에서으로 작동하지만 올바른 컨트롤러에 구현해야합니다. 텍스트 필드가있는 하위 컨트롤러가있는 모달 폼 시트 탐색 컨트롤러가있는 경우 자식이 아닌 메서드 구현이 필요한 탐색 컨트롤러입니다.

는 (참조 : Dismiss keyboard on IPAD)

+0

예! 마침내 이것을 해결했습니다. 텍스트 필드가 포함 된보기 컨트롤러를 표시하는보기 컨트롤러에서이 값을 설정해야합니다. –

21

애플 문서 describe this exception : 아이 패드에

, 뷰 컨트롤러 모달는 "폼 시트"스타일, 키보드, 한 번 표시를 사용하여보기를 제공 경우 사용자 탭까지 숨겨지지 않습니다 해제 키 또는 모달보기 컨트롤러는 프로그래밍 방식으로 해제 된 입니다. 이 동작의 목적은 사용자가 주로 이지만 전체적으로 텍스트 필드가 아닌 뷰 사이를 이동할 때 과도한 애니메이션을 피하는 것입니다.

여기 (iPad의 모달 양식 시트)가 적용됩니다. 이 경우 키보드를 닫을 수없는 것 같습니다. 감독자. : \

+1

+1 : 나는 이것을 알아 내려고 한시간 동안 머리카락을 뽑은 후에이 답을 찾았습니다. 대답은 사과가이 바보 같은 실행을 목적으로 한 것입니까? 너는 애플을 농담해야한다. –

+9

'disablesAutomaticKeyboardDismissal' 메서드를 오버라이드하고 모달로 표시되는 뷰 컨트롤러에 대해 NO를 반환 할 수 있습니다. 이렇게하면 키보드가 닫히지 않도록하는 기본 동작을 해결할 수 있습니다. – gdavis

+1

불행히도 disablesAutomaticKeyboardDismissal 수정이 iOS 6에서 작동하지 않는 것으로 보입니다. – Snips

1

disablesAutomaticKeyboardDismissal 오버라이드는 iOS6가 작동하지 않기 때문에, 내가 지금과 같은 방법으로 각 텍스트 필드의 "끝나요 종료"이벤트를 연결 한 다음이 키보드를 기각했다 :

- (IBAction)doneEditing:(id)sender { 

[sender endEditing:YES]; 

}

0

disablesAutomaticKeyboardDismissal

아이폰 OS 7 나를 위해 일하기를 거부하지만 ... 나는 단순히 화면의 UITextFields를 사용하지 않도록 설정하여이 문제를 해결하기 위해 관리.

내 솔루션은 here입니다.

모달 UIViewController에서 작동합니다.

0

방금 ​​이런 상황이 발생하는 독특한 상황을 발견했습니다. 내가 해고 당하면 화면에 키보드가 올라간다는 견해가 있습니다. 모든 것을 검사하고, 내 UITextFields 대리자가 내보기 등에 연결되어 있습니다. viewWillDisappear()에서 수동으로 키보드를 닫으려고하면 필드의 resignFirstResponder() 또는 뷰의 endEditing()이 작동하지 않습니다.

그런 다음 대리인 메서드 자체에서 내 필드 유효성 검사 코드임을 깨달았습니다. 필드에서 편집이 끝날 때마다 textFieldShouldEndEditing 대리자 메서드의 텍스트를 확인하여 텍스트가 합리적인지 확인하고 유효성을 검사 할 때까지 필드 밖으로 탭하지 못하게합니다.

func textFieldShouldEndEditing(textField: UITextField) -> Bool 
    { 
     if self.validateField(textField) { 
      return true 
     } else { 
      return false 
     } 
    } 

그래서 사용자가 텍스트를 입력하지 않고 이전보기로 돌아 왔을 때, 검증이 실패, 텍스트 필드는 첫 번째로 반응 상태의 포기 할 수 없습니다, 그들은 이전으로 돌아 가기로 키보드가 화면에 남아 전망.

비정상적인 상황이지만 희망적으로이 문제는 다른 사람에게 도움이됩니다. 신속한에서

+1

또는'return self.validateField (textField)' – Alnitak

0

은 당신의 UITextField에게 위임을주고 textFieldShouldReturn()는, 예를 들어 아래를 참조 생성 -

class ViewController: UIViewController, UITextFieldDelegate { 
    func settingUpTextField() { 
     textField.delegate = self; 
     return; 
    } 
    ... 
    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     textField.resignFirstResponder(); 
     return true; 
    } 
} 

을 완료!

관련 문제