未在自定义 UISearchBar 中获取过滤器数据
Posted
技术标签:
【中文标题】未在自定义 UISearchBar 中获取过滤器数据【英文标题】:Not getting filter data in Custom UISearchBar 【发布时间】:2017-03-20 09:56:02 【问题描述】:我正在 swift 3 中开发一个项目,我有一个特定的 UIViewController,我有一个 UITableView 并且要在其单元格上填充数据,数据是从服务器获取的,我将它分配给类型的数组JSON。我想实现一个自定义 UISearchBar 来过滤这些数据。我部分地研究了代码及其如下。
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
【问题讨论】:
我对你的工作很满意,但你为什么要发布这个? 您能否详细说明实际问题是什么?这将有助于回答问题 @Lu 因为过滤时我的数组是空的 【参考方案1】:从您的代码中,您使用的是UISearchBar
而不是UISearchController
,因此您只需比较numberOfRowsInSection
和cellForRowAt
方法中的searchBar
文本,不要将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
【讨论】:
@danutha 欢迎朋友 :)以上是关于未在自定义 UISearchBar 中获取过滤器数据的主要内容,如果未能解决你的问题,请参考以下文章
CAShapeLayers 未在自定义子类 (UIControl) 中绘制
UIImageView 未在自定义 UITableViewCell 中显示图像