์๋ ํ์ธ์ Foma ์ ๋๋ค!
์ธ์ ๋ ๊ทธ๋ฌ๋ฏ ์ ๋ชฉ ์ ํ๊ธฐ๊ฐ ๋๋ฌด ํ๋๋ค์...
์ค๋์ ์์๋ณผ๊ฑด ์์น๋ฐ์ ๊ฒ์ํ๊ณ ๊ฒ์ํ ๊ธ์๊ฐ ํฌํจ๋ ๊ฒ๋ค์ ํํฐ๋งํ ๊ฒ์ ํ ์ด๋ธ๋ทฐ์ ๋์ฐ๋ ๊ฒ์ ๋๋ค.
์ด๋ฒ ๊ธ์ ์ ๋ฒ ์๊ฐ์ ์์ ํ์ฑํ๋๋ฒ์์ ๋ฐฐ์ ๋ ๋๋ผ์ ๋์ ์ด๋ฆ๋ค์ด ๋ด๊ธด ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๊ฒ ์ต๋๋ค.
ํน์ ๋ชป๋ณด์ ๋ถ๋ค์ ์ฌ๊ธฐ ์์ ๋ณด๊ณ ์์ฃผ์ธ์!
๋ฐ๋ก ์์ํ ๊ฒ์~
Preview
Storyboard
์๋์ ๊ฐ์ด ํ ์ด๋ธ๋ทฐ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
(์ฃผ์ํ์ค ์ ์ ๋ฐ๋์ UIViewController๋ก ๋ง๋์ ํ์ TableView๋ฅผ AutoLayoutํด์ฃผ์ธ์!)
๊ทธ๋ฆฌ๊ณค ํด๋น ํ ์ด๋ธ๋ทฐ๋ฅผ control์ ๋๋ฅด๊ณ ๋๋๊ทธํด์ ViewController์ ๊ฐ์ ธ๊ฐ์ dataSource๋ฅผ ์ฒดํฌํด์ฃผ์ธ์.
AddViewController
์ ์ผ ๋จผ์ ํ ์ด๋ธ๋ทฐ๋ฅผ ์ฐ๊ฒฐ์์ผ์ฃผ์ธ์.
@IBOutlet weak var tableView: UITableView!
์๋์ ๊ฐ์ด ๋ชจ๋ ์์น๋ฅผ ๋ด์ ๋ฐฐ์ด๊ณผ ํํฐ๋ง๋ ์์น๋ฅผ ๋ด์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ค๋๋ค.
var allLocations:[Location] = []
var filteredLocation:[Location] = []
Location ๊ตฌ์กฐ์ฒด๋ ์๋์ ๊ฐ์ด ๋์์ ๋๋ผ ๊ทธ๋ฆฌ๊ณ ๋๋ผ์ฝ๋๋ฅผ ํ๋กํผํฐ๋ก ๋ง๋ค์ด์ค๋๋ค.
struct WeatherLocation: {
var city:String!
var country:String!
var countryCode:String!
}
๊ทธ ๋ค์์ผ๋ก ํ ์ด๋ธ๋ทฐ์ ์ ๋ถ๋ถ์ ํด๋น๋๋ UISearchController๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์.
let searchController = UISearchController(searchResultsController: nil)
๊ทธ๋ฆฌ๊ณค ์๋์ ๊ฐ์ด setUpSearchController ํจ์๋ฅผ ๋ง๋ค์ด์ ์์น์ปจํธ๋กค๋ฌ๋ฅผ ์ธํ ํด๋ณผ๊ฒ์!
์ ์ผ ๋จผ์ ์์์ ์ฐ๊ฒฐํ ํ ์ด๋ธ๋ทฐ์ ํค๋์ searchController.searchBar๋ฅผ ๋ฃ์ด์ค๋๋ค.
๊ทธ ๋ค์์ผ๋ก ์์น๋ฐ์ ํ๋ ์ด์คํ๋๋ฅผ ์ ํด์ฃผ๋๋ฐ์.( ํ๋ ์ด์คํ๋๋ ๊ฒ์ํ๊ธฐ ์ ์์น๋ฐ์ ํ์๊ธ์จ๋ก ๋ฏธ๋ฆฌ ๋์์ฃผ๋ ๊ธ์์ ๋๋ค.)
private func setUpSearchController() {
tableView.tableHeaderView = searchController.searchBar
searchController.searchBar.placeholder = "City or Country"
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.searchBarStyle = UISearchBar.Style.prominent
searchController.searchBar.sizeToFit()
}
๊ทธ๋ฆฌ๊ณ ์ค์ํ๊ฑด searchResultUpdater์ธ๋ฐ์.
์ด๊ฒ์ ์ฌ์ฉ์๊ฐ ๊ฒ์ํ ๊ฐ์ ๋ฐ๋ผ์ ์ปจํ ์ธ ๋ฅผ ์ ๋ฐ์ดํธ ์์ผ์ฃผ๋ ํ๋กํผํฐ ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ obobscuresBackgroundDuringPresentation ๊ฐ false๋ก ๋์ด์๋๋ฐ ์ด๊ฑด ๋ฌด์์ผ๊น์?
์ ํ ๋ฌธ์์ ๋์์๋ ๋ด์ฉ์ ๊ฐ๋จํ๊ฒ ํด์ํด๋ณด๋ฉด
"๊ฒ์ ์ค์ ๊ธฐ๋ณธ ์ฝํ ์ธ ๊ฐ ๊ฐ๋ ค ์ง๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๊ฒ์ ๋๋ค.
์ ๋ ์ฒ์์ ์ดํด๊ฐ ์๋ผ์ ํ๋ฒ true๋ก ํด๋ณด๊ณ false๋ก๋ ํด๋ณด์๋๋ฐ์.
์ผ์ชฝ์ด true๋ก ํ์๋ ์ค๋ฅธ์ชฝ์ด false๋ก ํ์๋ ์
๋๋ค. ์ด๋ ๊ฒ ๋ณด๋ ์ปจํ
์ธ ๋ฅผ ๊ฐ๋ฆฐ๋ค๋ ๋ง์ด ๋ฐ๋ก ์ดํด๊ฐ ๊ฐ๋ค์!
๊ทธ ๋ค์์ผ๋ก ์์น๋ฐ์ ์คํ์ผ๊ณผ ์ฌ์ด์ฆ๋ฅผ ์ํ์๋๋๋ก ์ ํด์ฃผ์ธ์!
AddTableViewCell
์๋์ ๊ฐ์ด TableViewCell์ ๋ง๋ค์ด์ฃผ์ธ์!
class AddTableViewCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
}
DataSource
์ด์ ํ ์ด๋ธ๋ทฐ์ DataSource๋ฅผ ์ธํ ํด๋ณผ๊ฒ์.
๋จผ์ numberOfRowsInSection์ ํํฐ๋ง๋ ์์น์ ๊ฐฏ์๋งํผ ์ธํ ํด์ฃผ์๊ณ
์ ์ ์ ๋ ์ด๋ธ์ location์ ๋์์ด๋ฆ ์๋ซ ๋ถ๋ถ์ ๋๋ผ์ด๋ฆ์ผ๋ก ์ค์ ํด์ค๋๋ค.
extension AddViewController:UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
filteredLocation.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "AddTableViewCell") as! AddTableViewCell
let location = filteredLocation[indexPath.row]
cell.textLabel?.text = location.city
cell.detailTextLabel?.text = location.country
return cell
}
}
๊ทธ๋ฆฌ๊ณค UISearchResultsUpdating ๋๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ค์ ํด์ฃผ๋๋ฐ
๋จผ์ updateSearchResults๋ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋๋ ๋ฉ์๋์ ๋๋ค.
์ด๊ฑด SearchController์ ๊ธ์๊ฐ ๋ฐ๋๋๋ง๋ค ํธ์ถ๋๋ ํจ์์์!
๊ทธ๋ฌ๋ฉด ๊ธ์๊ฐ ๋ฐ๋๋๋ง๋ค filteredContentfilteredContentForSearchText ํจ์๋ฅผ ํธ์ถํด์ฃผ๋ ๊ฒ์ด์ฃ .
filteredContentfilteredContentForSearchText ๋ ๊ฒ์ํ ๊ธ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์
๊ทธ ๊ธ์๊ฐ ํฌํจ๋ ๊ฐ์ฒด๋ฅผ ํํฐ๋งํด์ filteredLocation์ ๋ด์ ๋ค ํ ์ด๋ธ๋ทฐ๋ฅผ reload์์ผ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ๊ฒ์ํ ๊ธ์๊ฐ ํฌํจ๋ ๊ฐ์ฒด๋ค๋ง ํํฐ๋ง๋ ์์น๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ ์๊ฒ ์ฃ ?
extension AddViewController:UISearchResultsUpdating {
func filteredContentForSearchText(_ searchText:String){
filteredLocation = allLocations.filter({ (location) -> Bool in
return location.city.lowercased().contains(searchText.lowercased()) || location.country.lowercased().contains(searchText.lowercased())
})
tableView.reloadData()
}
func updateSearchResults(for searchController: UISearchController) {
filteredContentForSearchText(searchController.searchBar.text ?? "")
}
}
๋ง์ง๋ง์ผ๋ก ์๋์ ๊ฐ์ด ์ ๋ฒ ์๊ฐ์ ๋ฐฐ์ด loadLocationFromCSV ํจ์์ setUpSearchController ํจ์๋ฅผ ์คํ์์ผ์ฃผ๋ฉด
override func viewDidLoad() {
super.viewDidLoad()
loadLocationsFromCSV()
setUpSearchController()
}
์๋์ ๊ฐ์ด ๋์ ์ด๋ฆ์ด๋ ๋๋ผ ์ด๋ฆ์ ๊ฒ์ํ์๋ ํํฐ๋ง๋ ๊ฐ์ฒด๋ง ๋์์ฃผ๋ ํ ์ด๋ธ๋ทฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค!!
์ค๋์ ์ด๋ ๊ฒ ๊ฒ์ํ๊ณ ํํฐ๋งํ๋ ๋ฒ์ ๋ํด์ ์์๋ณด์๋๋ฐ์.
ํน์๋ผ๋ ํ๋ฆฐ ์ ์ด ์๊ฑฐ๋ ๊ถ๊ธํ์ ์ฌํญ์ด ์์ผ์๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!!
๋๊ธ