2017-03-06 3 views
0

내 VC에 두 개의 textFieldsDone 버튼이 있지만 편집이 끝나는 데 문제가 있습니다. I는 Done 버튼을 탭스위프트 : 키보드를 닫으려고 UITextField를 얻을 수 없습니다.

(I 상위 뷰 탭 인식기를 첨가하기 때문에) I 다른 한 때, 또는 I가 텍스트 필드 외부 탭 내부 된 후 하나 textField을 탭 언제 textFieldDidEndEditing 메소드가 호출 될 수 있지만.

가장 중요한 것은 (특히 실제 장치에서 실행하는 경우) 내 textFieldDidEndEditing 메서드가 resignFirstResponder()을 호출하더라도 이러한 상황에서 키보드가 사라지지 않습니다.

키보드가 닫히지 않는 이유는 무엇입니까? 또한, 내가 자동으로 (탭 인식기에서 오지 않고) 필드 외부를 살짝 누르면 textFieldDidEndEditing이 호출되는 방법이 있습니까? 이게 어떻게 작동해야하는 것 같아요,하지만 내가 틀렸다면, 틀렸어.

내 코드의 일부 관련 부분은 다음과 같습니다.

1. 키보드를 닫으려고합니다. 이 메서드의 첫 번째 부분이 작동하고 값이 저장됩니다 (메서드가 전혀 호출되지 않은 경우). 어떤 시점에서도 커서가 textField에서 사라지거나 키보드가 닫히지 않습니다.

또한
 func textFieldDidEndEditing(_ textField: UITextField) { 
    if let playerName = textField.text, let playerNum = nameFields.index(of: textField) { 
     playerNames[playerNum] = playerName 
    } 
    resignFirstResponder() 
} 

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    textFieldDidEndEditing(textField) 
    return true 
} 

, 여기에 호기심이 일이 : 다음 textFieldDidEndEditing에서 정지, 그 다음 장면에 segues, 내가 textFieldDidEndEditing 및 디버그에 중단 점을 설정할 때, 하나 개의 필드에 값을 입력하고 Done을 공격하고, 하는 이 시점에서 효과가 없습니다 (값은 저장 될 수 있지만 새 장면에 반영되지는 않습니다).

2. 완료 버튼에 탭 인식기를 추가하려고합니다. 나는 코드에서 done 버튼에 대한 콘센트가 없다. 그냥 게으름에서 나온 것이므로, 아마도 이것이 최선의 해결책 일 것이다. 그러나 나는 아직도 이것이 작동하지 않는 이유에 관심이 있습니다. 이는 상위보기에서 작동중인 탭 인식기를 정의하는 코드와 동일합니다.

func dismiss(_ sender:UITapGestureRecognizer) { 
    nameFields.forEach { textFieldDidEndEditing($0) } 
} 

override func viewDidAppear(_ animated: Bool) { 
    for view in view.subviews where view is UIButton { 
     let dismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismiss(_:))) 
     dismissTextField.numberOfTapsRequired = 1 
     view.addGestureRecognizer(dismissTextField) 
    } 
} 

답변

3

는 대신 textFieldDidEndEditing를 호출 resignFirstResponder 방법 textFieldShouldReturn 내부를 호출해야합니다. 단순히 대신 텍스트 필드의 배열을 통해 반복의 당신의 viewendEditing(_:)를 호출하여 TapGesture 방법 또한

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 
    return true 
} 

.

func dismiss(_ sender:UITapGestureRecognizer) { 
    self.view.endEditing(true) 
} 
+0

오 세상에 나는 너무 바보입니다. 나는 그것을 올바른 장소에서 부르고 있었지만, 나는 그것을 아무 것도 부르지 않았다. 단순히'resignFirstResponder()'를'textField.resignFirstResponder()'로 변경하면 모든 것이 수정되었습니다. 코드에 완료 버튼에 대한 콘센트 액션을 추가하는 것입니다. 감사! –

+0

@JonathanTuzman 환영 메이트 :) –