저는 앱에서 UISearchController를 구현하려고 시도했으며 참조 용으로는 this 튜토리얼을 따랐습니다. 튜토리얼은 필자가 필요로했던 것보다 더 많은 것을 다루었 다 (스코프와 같은). 그래서 나는 그것을 훑어 보았다. 그러나 테스트 애플리케이션을 실행했을 때, 검색은 작동하지 않았다. 검색 창에 입력 할 때 "검색"을 눌렀는지 여부에 관계없이 입력 한 첫 번째 문자에 대한 결과 만 필터링했습니다. 예를 들어, "dolphin"을 입력하면 "d"가 포함 된 결과 만 표시됩니다. updateSearchResultsForSearchController
안에 인쇄함으로써, 나는 그것이 단지 한 번 불렀다는 것을 확인했다.iOS updateSearchResultsForSearchController는 한 번만 호출되었습니다.
그러나 검색 창에서 모든 항목을 삭제하면 결과가 다시 필터링되지 않고 다시 입력됩니다.
here 제안 된 해결 방법을 시도했지만 여전히 문제가 지속됩니다.
class SearchController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate {
let data = [
"bottlenose dolphin": 111,
"manta ray": 172,
"humphead wrasse": 388,
"Commerson's dolphin": 19
// etc.
]
var results = [String: Int]()
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchController.active && searchController.searchBar.text != "" {
return results.count
} else {
return data.count
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
if searchController.active && searchController.searchBar.text != "" {
let index = results.startIndex.advancedBy(indexPath.row)
cell.textLabel!.text = results.keys[index]
} else {
let index = data.startIndex.advancedBy(indexPath.row)
cell.textLabel!.text = data.keys[index]
}
return cell
}
func search(searchText: String) {
let temp = data.filter({(element: (String, Int)) -> Bool in
return element.0.lowercaseString.containsString(searchText.lowercaseString)
})
for element in temp { results[element.0] = element.1 }
tableView.reloadData()
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
updateSearchResultsForSearchController(searchController)
}
func updateSearchResultsForSearchController(searchController: UISearchController) {
search(searchController.searchBar.text!)
}
}
이 튜토리얼을 감추고 때이 단계를 놓친 기회입니다,하지만 난 아무 소용이 그것을 통해 몇 번 더 검토 한 결과이 내 코드입니다. 검색을 제대로 수행하려면 어떻게해야합니까?
편집 : 또한 검색의 첫 번째 문자가 포함되지 않은 검색 결과가 나타납니다. 예를 들어 다른 데이터 세트를 사용하여 "J"를 검색하면 "Silicon Valley"가 나타났습니다 ...
나는 그처럼 간단한 것을 간과했다고 생각할 수 없다! 이제 검색이 작동합니다. 감사합니다! – Technicolor
같은 문제가 발생했습니다. 고마워. –