我创建了一个带有自定义单元格的表格视图,现在正在努力添加搜索栏。
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
}
}
成千上万的视频如何在简单的数组中进行搜索。但不是我的解决方案。
答案 0 :(得分:0)
当您拥有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
答案 1 :(得分:0)
您可以使用UISearchBar进行此操作。 首先在故事板中的tableView所在的同一viewController上添加一个UISearchBar(在iOS等表格视图顶部添加搜索栏。然后在app中添加引用),如下代码:
@IBOutlet weak var searchBar: UISearchBar!
然后在viewDidLoad中添加委托:
self.searchBar.delegate = self
我有两个dataArray allData,filteredData。在allData中,我保留了表格的所有数据(未在任何地方进行更改),并且filterData用于获取过滤结果。 因此,在将数据填充到allData之后,我已经完成了(viewWillAppear):
filteredData = allData
因此,所有tableView委托,数据源都使用了filteredData。
然后扩展您的viewController(使扩展不是强制性的)以符合UISearchBarDelegate:
当您将SVGdata(我使用filteredData)用于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()
}
}