未在自定义 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,因此您只需比较numberOfRowsInSectioncellForRowAt 方法中的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 中显示图像

按钮未在自定义 UIButton 中注册触摸

Android M 权限:onRequestPermissionsResult() 未在自定义按钮类中调用

recharts img 未在自定义点中呈现