개발/Swift
[Swift] ReloadData 호출시 키보드 사라지는 오류
덤벨로퍼
2022. 8. 15. 15:17
ReloadData 호출시 키보드 사라지는 오류
Collection view 에서 데이터를 갱신할떄 reloadData()를 사용한다.
textfiled 가 search 되는 시점에 reloadData() 를 호출했었는데
textfield가 editing 되는 시점에 reloadData()를 호출해야하는 요구 사항이 발생했다.
그래서 textEditing 되는 시점에 리스트를 필터링하여 reloadData를 호출했더니
키보드가 사라지는 현상이 발생했다
흔히 textField.resignFirstResponder() 함수가 실행되면 키보드가 사라지는데
해당 함수를 실행시키고 있지는 않았다. 그러므로 reloadData()가 호출되면
firstResponder가 자동으로 바뀌는것같았다.
구글링 이후에 가장 간단히고 깔끔한 방법은 이거였다
class ProjectSearchTextField: UITextField {
var canResign: Bool = false
override var canResignFirstResponder: Bool {
return canResign
}
}
위와 같이 textfield canResignFirstResponder 를 오버라이딩 하여 수정할수 있게 변경한다.
(canResignFirstResponder 은 get only 이므로 원래는 변경이 불가하다)
searchTextField.rx.controlEvent([.editingChanged]).subscribe { [weak self] _ in
guard let self = self, let text = self.searchTextField.text
else { return }
self.searchTextField.canResign = false
//Reload Data 발생 시점
self.searchTextField.canResign = true
}.disposed(by: disposeBag)
textEditing 이 발생할때 canResign을 불가하게 한뒤
다시 원래대로 돌려놓는 방식으로 사용하면 된다.