Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- swiftUI
- Refactoring
- combine
- tableView
- 애니메이션
- 스위프트
- ios
- ribs
- Human interface guide
- 리펙터링
- RxCocoa
- collectionview
- clean architecture
- 리펙토링
- HIG
- UITextView
- SWIFT
- 클린 코드
- Clean Code
- uiscrollview
- swift documentation
- map
- Observable
- 리팩토링
- Protocol
- rxswift
- uitableview
- MVVM
- Xcode
- UICollectionView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 검색 창, 테이블뷰 (UISearchController, ContainerView, tableView, UISearchController) 본문
iOS 응용 (swift)
[iOS - swift] 검색 창, 테이블뷰 (UISearchController, ContainerView, tableView, UISearchController)
jake-kim 2021. 6. 26. 03:13
* UISearchBar HIG 참고: https://ios-development.tistory.com/505
UISearchController의 구조
구현
SceneDelegate 삭제
- SceneDelegate.swift 삭제
- info.plist에 "Main storyboard file base name" = "Main" 부분 삭제
- info.plist에 Application Scene Manifest 삭제
- AppDelegate.swift에 UISsceneSession Lifecycle 관련 메소드 2개 삭제
Container View안에 UITableView 삽입
- UIViewController에 내장될 UITableView 생성
- UIViewController안에 ContainerView 삽입
- 자동으로 View Controller 생성
- ContainerView를 TableView의 크기 레이아웃 설정 > embed segue로 이어진 View Controller 삭제
- containerView에서 embed segue로 UITableView 연결
UISearchController
- xib에서는 지원하지 않으므로 code로 구현
- UIView로 자리를 먼저 남겨놓고 거기에 SearchBar 삽입
// ViewController.swift
private var searchController: UISearchController = {
return UISearchController(searchResultsController: nil)
}()
- 검색 창 초기화
- obscuresBackgroundDuringPresentation:
- 검색창에 포커스가 모달 방식 (뒷 배경 약간 어두워지는 처리 + 탭해도 선택 안되는 상태)
- false 설정 케이스: 동일한 뷰 컨트롤러를 사용하여 검색 가능한 컨텐츠 및 검색 결과를 표시하는 경우
- obscuresBackgroundDuringPresentation:
// MARK: - Search Controller
extension ViewController {
private func setupSearchBar() {
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.barStyle = .default
searchController.searchBar.placeholder = "검색 창"
searchController.searchBar.translatesAutoresizingMaskIntoConstraints = true
searchController.searchBar.frame = searchBarContainerView.bounds
searchController.searchBar.autoresizingMask = [.flexibleWidth]
searchBarContainerView.addSubview(searchController.searchBar)
definesPresentationContext = true
}
}
- delegate
extension ViewController: UISearchControllerDelegate {
func willPresentSearchController(_ searchController: UISearchController) {
print(#function, "updateQueriesSuggestions")
}
func willDismissSearchController(_ searchController: UISearchController) {
print(#function, "updateQueriesSuggestions")
}
func didDismissSearchController(_ searchController: UISearchController) {
print(#function, "updateQueriesSuggestions")
}
}
extension ViewController: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
guard let searchText = searchBar.text, !searchText.isEmpty else { return }
searchController.isActive = false
print(searchText)
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
print("cancel")
}
}
* source code: https://github.com/JK0369/SearchBarEx
'iOS 응용 (swift)' 카테고리의 다른 글
Comments