UISearchBar с сгруппированным представлением таблицы - в Swift
Прости, что не смог понять это сам. Я подобрал iOS в Swift и мало изучил цель-c.
Я пытаюсь встроить uisearchbar
это фильтрует через сгруппированное табличное представление, составленное из нескольких массивов для его секций. По сути, мне нужно отфильтровать через NSMutableArray
построенный из других массивов для получения результатов поиска (обычный массив не может быть скомпилирован за "разумное время"). Я взглянул на этот урок, и он получил то, что мне нужно, но, к сожалению, я не самый лучший, когда дело доходит до перевода Obj-c на swift, в данном случае. Любая помощь (перевод) или направление к другим учебникам, которые помогут мне сделать это, очень ценится. Я искал и искал, и возился всю ночь - но я сдался, мне нужна помощь.
Изменить: до сих пор не ответил
2 ответа
Это похоже на код Objective-C, но давайте начнем отсюда
После того, как вы создадите свой контроллер представления, представление таблицы и компоненты панели поиска, в классе ViewController вы должны делегировать элементы ViewController, например:
tableView.delegate = self
tableView.dataSource = self
searchBar.delegate = self
И тогда вы должны реализовать (переопределить) методы, такие как
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
filtered = data.filter({ (text) -> Bool in
let tmp: NSString = text
let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
return range.location != NSNotFound
})
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.tableView.reloadData()
}
объяснил здесь делегация
Также вот ссылка-видео на Youtube
Надеюсь, поможет
Добавьте эти методы UISearchBarDelegate в свой класс, и ваш класс должен подтвердить этот протокол, используя любой код self.yourSearchBar.delegate = self
или в раскадровке.
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchBar.text = ""
searchBar.resignFirstResponder()
self.searchedArrayToDisplay = self.listDataArray
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
if searchText == "\n" {
searchBar.resignFirstResponder()
} else if searchText == "" {
self.searchedArrayToDisplay = self.listDataArray
} else {
self.filterContentForSearchText(searchText)
}
}
func filterContentForSearchText(searchText: String) {
self.searchedArrayToDisplay = self.listDataArray.filter({(eachObject: [String:AnyObject]) -> Bool in
let name = eachObject["name"] as! String
let stringMatch = name.lowercaseString.rangeOfString(searchText.lowercaseString)
let result = stringMatch != nil ? true : false
return result
})
}
Теперь в ячейке для метода индекса пути
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell : UITableViewCell = UITableViewCell(style:UITableViewCellStyle.Value1, reuseIdentifier:"cell")
var object = self.searchedArrayToDisplay[indexPath.row]
}