SWIFT 4 UISearchBar и UITableView - PullRequest
       5

SWIFT 4 UISearchBar и UITableView

0 голосов
/ 03 ноября 2018

Я запустил табличное представление со списком университетов и создал панель поиска, чтобы отметить ее вместе с ней. Панель поиска работает, но только если я напишу название школы именно так, как оно есть. Есть ли способ, которым я могу изменить его, чтобы найти любую часть имени и получить те же результаты? Вот код, который я настроил.

@IBOutlet weak var schoolSearch: UISearchBar!
@IBOutlet weak var tblView: UITableView!

let schoolnames = ["Long Beach City College LAC", "California State University, Bakersfield", ...]

var searchedSchool = [String]()
var searching = false

override func viewDidLoad() {
    super.viewDidLoad()
    schoolSearch.delegate = self

    self.tblView.delegate = self
    self.tblView.reloadData()
}

extension ChooseSchool: UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if searching {
            return searchedSchool.count
        } else {
            return schoolnames.count
        }
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? TableViewCell
        cell?.img.image = UIImage(named: schoolnames[indexPath.row])
        cell?.lbl.text = schoolnames[indexPath.row]

        _ = tableView.dequeueReusableCell(withIdentifier: "cell")
        if searching {
            cell?.textLabel?.text = searchedSchool[indexPath.row]
        } else {
            cell?.textLabel?.text = schoolnames[indexPath.row]
        }
        return cell!
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let vc = storyboard?.instantiateViewController(withIdentifier: "TestController") as? TestController
        vc?.schoolnames = schoolnames[indexPath.row]
        navigationController?.pushViewController(vc!, animated: true)
    }

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        searchedSchool = schoolnames.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased()})
        searching = true
        tblView.reloadData()
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        searching = false
        searchBar.text = ""
        tblView.reloadData()
    }
}

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Я думаю, вы должны заставить свой searchBar реализовывать метод containsString для достижения того, что вам нужно Для справки посмотрите на эту ссылку

0 голосов
/ 03 ноября 2018

Заменить

searchedSchool = schoolnames.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased()})

с

searchedSchool = schoolnames.filter { $0.range(of: searchText, options: .caseInsensitive) != nil }
...