Вы можете сделать это, используя 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()
}
}