내 VC에 두 개의 textFields
과 Done
버튼이 있지만 편집이 끝나는 데 문제가 있습니다. 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)
}
}
오 세상에 나는 너무 바보입니다. 나는 그것을 올바른 장소에서 부르고 있었지만, 나는 그것을 아무 것도 부르지 않았다. 단순히'resignFirstResponder()'를'textField.resignFirstResponder()'로 변경하면 모든 것이 수정되었습니다. 코드에 완료 버튼에 대한 콘센트 액션을 추가하는 것입니다. 감사! –
@JonathanTuzman 환영 메이트 :) –