diff --git a/NetworkBasic/NetworkBasic/Base.lproj/Main.storyboard b/NetworkBasic/NetworkBasic/Base.lproj/Main.storyboard index b970bb5..76a0d97 100644 --- a/NetworkBasic/NetworkBasic/Base.lproj/Main.storyboard +++ b/NetworkBasic/NetworkBasic/Base.lproj/Main.storyboard @@ -438,7 +438,7 @@ - + @@ -472,18 +472,26 @@ + + + + + + - + + + diff --git a/NetworkBasic/NetworkBasic/ImageSearchViewController.swift b/NetworkBasic/NetworkBasic/ImageSearchViewController.swift index 9abd0a3..980b833 100644 --- a/NetworkBasic/NetworkBasic/ImageSearchViewController.swift +++ b/NetworkBasic/NetworkBasic/ImageSearchViewController.swift @@ -17,16 +17,17 @@ class ImageSearchViewController: UIViewController { var totalCount = 0 @IBOutlet weak var collectionView: UICollectionView! + @IBOutlet weak var searchBar: UISearchBar! override func viewDidLoad() { super.viewDidLoad() - fetchImage() + searchBar.delegate = self configureCollectionView() } // fetchImage, requestImage, callRequestImage, getImage -> response에 따라 네이밍을 설정해주기도 함. - func fetchImage() { - let text = "클클클".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! + func fetchImage(query: String) { + let text = query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! let url = EndPoint.imageSearchURL + "query=\(text)&display=100&start=\(startPage)" let headers: HTTPHeaders = [ "X-Naver-Client-Id": APIKey.NAVER_ID, @@ -35,7 +36,7 @@ class ImageSearchViewController: UIViewController { AF.request(url, method: .get, headers: headers) .validate(statusCode: 200...500) - .responseJSON { response in + .responseData { response in switch response.result { case .success(let value): let json = JSON(value) @@ -54,6 +55,36 @@ class ImageSearchViewController: UIViewController { } } +extension ImageSearchViewController: UISearchBarDelegate { + + // 검색 버튼 클릭 시 실행. (키보드 Return키에 디폴트 구현) + func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { + + if let text = searchBar.text { + // 검색 결과가 계속 바뀌기 때문에, 그럴 때마다 초기화 해줄 필요가 있음 + searchThumnailStrings.removeAll() + startPage = 1 + collectionView.scrollsToTop = true + fetchImage(query: text) + } + + view.endEditing(true) + } + + // 취소 버튼 눌렀을 때 실행 + func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { + searchThumnailStrings.removeAll() + collectionView.reloadData() + searchBar.text = "" + searchBar.setShowsCancelButton(false, animated: true) + } + + // 서치바에 커서가 깜빡이기 시작할 때 실행 + func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { + searchBar.setShowsCancelButton(true, animated: true) + } +} + extension ImageSearchViewController: UICollectionViewDelegate, UICollectionViewDataSource { private func configureCollectionView() { collectionView.delegate = self @@ -105,7 +136,7 @@ extension ImageSearchViewController: UICollectionViewDataSourcePrefetching { for indexPath in indexPaths { if searchThumnailStrings.indices.last == indexPath.item && searchThumnailStrings.count < totalCount { startPage += 30 - fetchImage() + fetchImage(query: searchBar.text!) } } // print("===\(indexPaths)")