Как искать данные в табличном представлении? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть данные в локальном файле, я загрузил их в tableView, и теперь я хочу искать / фильтровать через панель поиска.

Я пробовал некоторые решения, которые нашел в Интернете, но я не знаю, как получить доступ к конкретным данным в моей структуре.

Вот часть структуры:

struct Model: Codable {
    var data: [Description]
}

struct Description: Codable {
    var id: Int
    var name: String
    var address: String
    var city: String
    var description: String
    var countryId: Int
    var webSite: String
    var status: Int
    var accountType: Int
    var addDate: String
    var placeGroupId: Int
    var longitude: Double
    var latitude: Double
    var distance: Double
    var working: Bool
    var promotion: String
    var repertoire: Repertoire
    var workingHour: WorkingHour
    var country: Country
    var reviewNum: Int
    var score: Double
    var placeImgUrl: String
}

var model: Model?

и вот код из моего ViewController:

var filteredObjects = [Description]()

let searchController = UISearchController(searchResultsController: nil)

func searchBarIsEmpty() -> Bool {
    return searchController.searchBar.text?.isEmpty ?? true
}

func filterContentForSearchText(_ searchText: String, scope: String = "All") {

}

extension ViewController: UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {
    <#code#>
    }
}

У меня есть переменная модель, которая является типом структуры Модель. Структура Модель имеет переменные данные, которые являются типом структуры Описание И наконец, в структуре Description у меня есть имя переменной. В моих ячейках tableView отображаются названия моделей (модель? .Data [indexPathrow.row] .name). Теперь мне нужно искать по именам, показанным в ячейках tableView. Я надеюсь, что я объяснил это ясно. Большое спасибо!

1 Ответ

0 голосов
/ 02 июля 2019

Предполагая, что objects также [Description] и представляет массив источника данных

func updateSearchResults(for searchController : UISearchController)
{
    let searchString = searchController.searchBar.text!
    if searchString.isEmpty {
        filteredObjects.removeAll()
    } else {
        filteredObjects = objects.filter{ $0.name.range(of: searchString, options: .caseInsensitive) != nil } 
    }
    tableView.reloadData()
}

В табличном представлении методы источника данных отображают objects или filteredObjects в зависимости от searchController.isActive

...