Реализовать панель поиска для просмотра таблицы с пользовательской ячейкой - PullRequest
1 голос
/ 05 июля 2019

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

import UIKit

class ViewController: UIViewController, UITableViewDataSource {

var SVGdata = [SVG]()

override func viewDidLoad() {
    super.viewDidLoad()

}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    createSVGdata()
}

// Create movies data
func createSVGdata() {
    SVGdata.append(SVG(SVGArtikel: "Art. 1", SVGGesetzestext: "Das darfst du nicht tun"))
    SVGdata.append(SVG(SVGArtikel: "Art. 2", SVGGesetzestext: "Und das erst recht nicht"))

}

// TableView
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return SVGdata.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "SVGCell", for: indexPath)

    let sVG = SVGdata[indexPath.row]
    if let SVGCell = cell as? SVGCell {
        SVGCell.setSVG(sVG)
    }

    return cell
}

}

Существуют тысячи видеороликов о том, как искать в простом массиве.Но не для моего решения.

Ответы [ 2 ]

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

Вы можете сделать это, используя UISearchBar.Сначала добавьте UISearchBar в раскадровку на том же viewController, где находится ваш tableView (добавьте панель поиска в верхней части представления таблицы, как в iOS. Приложение для контактов), затем добавьте ссылку, как показано ниже:

@IBOutlet weak var searchBar: UISearchBar!

Затем в viewDidLoadдобавить делегата:

self.searchBar.delegate = self

У меня есть два dataArray allData, FilterData.В allData я сохранил все данные таблицы (нигде не менял) и отфильтровал данные, использованные для получения отфильтрованного результата.Итак, после заполнения данных в allData, я сделал из (viewWillAppear):

filteredData = allData

Итак, все делегаты tableView, источники данных используются фильтрованные данные.
Затем создайте расширение вашего viewController (создание расширенияне обязательно) для соответствия UISearchBarDelegate:

Поскольку вы используете SVGdata (я использовал фильтрованные данные) для tableView, после фильтрации вы должны поместить все отфильтрованные данные в SVGdata перед перезагрузкой таблицы.

extension YourViewController: UISearchBarDelegate{
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    // searchText will contain user input
    // in allData I have kept all data of the table
    // filteredData used to get the filtered result
        if (searchText == ""){
            filteredData = allData
        }
        else{
            filteredData = []
        // you can do any kind of filtering here based on user input
            filteredData = allData.filter{
                $0.cName.lowercased().contains(searchText.lowercased())
            }   
        }
    // lastly you need to update tableView using filteredData so that the filtered rows are only shown
    //As you use SVGdata for tableView, after filtering you have to put all filtered data into SVGdata before reloading the table.
        self.tableView.reloadData()
    }
}
0 голосов
/ 05 июля 2019

Я знаю два способа добавления панели поиска, когда у вас есть TableView, поэтому я рекомендую вам сначала решить, какая реализация лучше подходит для вашего приложения:

Во-первых, если у вас есть UINavigationController, вы можете использовать встроенную реализацию панели поиска, которая появится в панели навигации. Я имею в виду, что сначала вам нужно добавить UINavitationController в ваш контроллер представления программно или через раскадровку. Затем вы должны создать UISearchController и связать его с UINavigationController. Наконец, прослушивайте события через UISearchController Delegate, происходящие в панели поиска навигации, чтобы вы могли обновить свой вид.

https://www.raywenderlich.com/472-uisearchcontroller-tutorial-getting-started

Второй способ - это панель поиска, которая связана с tableView через его заголовок, читайте несколько учебников, пока не сделаете это.

https://www.ioscreator.com/tutorials/add-search-table-view-ios-tutorial

...