Ios 未在自定义UISearchBar中获取筛选器数据
我在swift 3中的一个项目中工作,我有一个特定的UIViewController,其中我有一个UITableView,为了在其单元格中填充数据,数据来自服务器,我将其分配给JSON类型的数组。我想实现一个定制的UISearchBar来过滤这些数据。我在代码和它下面的部分工作Ios 未在自定义UISearchBar中获取筛选器数据,ios,swift,uitableview,swift3,uisearchbar,Ios,Swift,Uitableview,Swift3,Uisearchbar,我在swift 3中的一个项目中工作,我有一个特定的UIViewController,其中我有一个UITableView,为了在其单元格中填充数据,数据来自服务器,我将其分配给JSON类型的数组。我想实现一个定制的UISearchBar来过滤这些数据。我在代码和它下面的部分工作 import UIKit import SwiftyJSON import SDWebImage class ViewController: UIViewController,UITableViewDelegate,
import UIKit
import SwiftyJSON
import SDWebImage
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchResultsUpdating,UISearchBarDelegate {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
var searchActive : Bool?
var selectedCategoryList = [JSON?]()
var filterSelectedCategoryList = [JSON?]()
var lab :String?
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
passJson()
self.searchBar.delegate = self
self.tableView.reloadData()
}
func updateSearchResults(for searchController: UISearchController) {
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filterSelectedCategoryList = selectedCategoryList.filter { titles in
return (titles?["healerName"].stringValue.lowercased().contains(searchText.lowercased()))!
}
tableView.reloadData()
print("Array : ", filterSelectedCategoryList)
}
func passJson() {
let path : String = Bundle.main.path(forResource: "JsonFile", ofType: "json") as String!
let jsonData = NSData(contentsOfFile: path) as NSData!
let readableJson = JSON(data: jsonData as! Data, options: JSONSerialization.ReadingOptions.mutableContainers, error: nil)
let json = readableJson
print(json)
let selectedItemArray = json["itemList"].arrayValue
self.selectedCategoryList = selectedItemArray
print("new prints",self.selectedCategoryList)
tableView.reloadData()
// print( "Count",selectedItemArray?.count as Any)
self.count = self.selectedCategoryList.count
print(self.count)
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.searchController.isActive && self.searchBar.text != ""{
return filterSelectedCategoryList.count
}else{
return selectedCategoryList.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
if count > 0 {
if self.searchController.isActive && self.searchBar.text != ""{
cell.label.text = filterSelectedCategoryList[indexPath.row]?["healerName"].stringValue
}else{
cell.label.text = selectedCategoryList[indexPath.row]?["healerName"].stringValue
cell.textLabel?.text = selectedCategoryList[indexPath.row]?["id"].stringValue
//cell.textLabel?.text=
self.lab = cell.textLabel?.text
cell.textLabel?.isHidden = true
}
}
return cell
}
从您的代码中,您使用的是
UISearchBar
而不是UISearchController
,因此您只需比较methodsnumberOfRowsInSection
和cellForRowAt
中的searchController.isActive
文本,而不必比较searchController.isActive
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.searchBar.text != ""{
return filterSelectedCategoryList.count
}else{
return selectedCategoryList.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
if self.searchBar.text != ""{
cell.label.text = filterSelectedCategoryList[indexPath.row]?["healerName"].stringValue
}else{
cell.label.text = selectedCategoryList[indexPath.row]?["healerName"].stringValue
cell.textLabel?.text = selectedCategoryList[indexPath.row]?["id"].stringValue
//cell.textLabel?.text=
self.lab = cell.textLabel?.text
cell.textLabel?.isHidden = true
}
return cell
}
我对你的工作很满意,但你为什么要发布这个?你能详细说明实际问题吗?这将有助于回答这个问题question@Lu因为我的数组在filtering@danutha欢迎朋友:)