적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

카테고리 없음

[Swift iOS] UISearchBar

hongssup_ 2022. 7. 8. 16:42
반응형

UISearchBar 선언

lazy bar searchBar: UISearchBar = {
    let searchBar = UISearchBar(frame: CGRect(...))
    searchBar.placeholder = "검색어를 입력하세요."
    searchBar.setImage(UIImage(named: "iconSearchDarkGray"), for: .search, state: .normal)
    searchBar.setImage(UIImage(named: "iconCloseDarkGray"), for: .clear, state: .normal)
    
    return searchBar
}()

UISearchBarDelegate 프로토콜 추가

 

검색 버튼을 눌렀을 경우 검색 시작되는 함수 

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    if let searchText = searchBar.text {
        //검색 처리
    } else {
        //검색어를 입력해주세요
    }
}

 

UISearchBar x button

searchBarCancelButtonClicked(_ searchBar: UISearchBar)

처음에 이걸로 착각했는데 이거는 x 버튼이 아니라 cancel버튼을 따로 만들어줬을 경우. 

 

화면 터치 시 키보드를 숨기고 싶은데, 원래 알던 방법으로는 숨겨지지가 않았다. 

( 화면 터치 시 키보드 숨기기 -> 흥미로운 UITextFieldDelegate 참고 )

빈 화면 터치하면 작동이 잘 되지만, 화면이 컬렉션뷰나 테이블뷰로 이루어져있을 경우 화면 터치 인식이 안되는 것이었다. 

여러가지 방법을 시도해보았지만 실패했고, 해결방법은 생각보다 간단했다. 

 

스크롤 뷰에서 스크롤이 시작되면 자동으로 키보드를 숨겨주는 함수가 있었다!

var keyboardDismissMode: UIScrollView.KeyboardDismissMode { get set }

위 함수를 사용하여 아래와 같이 설정해주면, 화면 스크롤 시 자동으로 키보드가 사라진다. 

collectionView.keyboardDismissMode = .onDrag
tableView.keyboardDismissMode = .onDrag

 

 

728x90
반응형