-
[Swift] ReloadData 호출시 키보드 사라지는 오류개발/Swift 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을 불가하게 한뒤
다시 원래대로 돌려놓는 방식으로 사용하면 된다.
'개발 > Swift' 카테고리의 다른 글
[Swift] Superview 의 tap gesture 적용시 sub view에 영향 안주기 (0) 2022.08.19 [Swift] Cell 에 init 을 하고싶을때 (0) 2022.08.16 [TIL] 라이브러리 배포시 주의사항 (접근제한자, 리소스관리) (0) 2022.07.08 [TIL] Cell highlighted UI변경, removeFromSuperview 안되는 경우 (0) 2022.07.08 [Github action IOS] CI/CD Testflight 자동화 배포 하기 (0) 2022.05.19