UISearchBar Filter UITableView с фильтром NSPredicate из массива словаря с несколькими ключами - PullRequest
1 голос
/ 10 июля 2019

Я настраиваю UISearchBar на UITableView. UITableViewCell имеет 3 UIlabel и данные находятся в NSArray со словарями с тремя ключами "name", "phone", "email" Я отфильтровал таблицу, но она фильтрует по имени, электронной почте или телефону Я хочу отфильтровать все три ключа

попробовал все предикаты NSCoumpound, но не смог пробовал фильтр

extension CleanerListViewController: UISearchBarDelegate{
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        let formatString = "(name contains[c] %@)"
        filterList = cleanerList.filter { NSPredicate(format: formatString, searchText).evaluate(with: $0) } as NSArray

        if searchText.count == 0{
            filterList = cleanerList
        }
        self.tblCleanerList.reloadData()
    }
}

ScreenShot

Единственный код выше работает для отдельных клавиш любая помощь будет оценена, пожалуйста, не голосуйте "за"

1 Ответ

1 голос
/ 10 июля 2019
extension CleanerListViewController: UISearchBarDelegate{
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

        if searchText.isEmpty {
            filterList = cleanerList
        } else {
            let keys = ["name", "phone", "email"]
            let subPredicates = keys.map({ NSPredicate(format: "%K CONTAINS[c] %@", $0, searchText) })
            let predicate = NSCompoundPredicate(orPredicateWithSubpredicates: subPredicates)
            filterList = cleanerList.filter { predicate.evaluate(with: $0) } as NSArray
        }

        self.tblCleanerList.reloadData()
    }
}
...