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]
}
Другие вопросы по тегам