gpt4 book ai didi

ios - 如何在数组类型为 JSON 时实现自定义搜索栏

转载 作者:行者123 更新时间:2023-11-29 00:26:40 25 4
gpt4 key购买 nike

我正在使用 swift 3 开发一个项目,我有一个特定的 UIViewController,我有一个 UITableView 并在其单元格上填充数据,数据是从服务器获取的,我将它分配给一个类型的数组JSON。因此,我将 UISearch 栏放置在同一个 UIViewController 中的不同位置(而不是作为 UITableView 的标题)。我的要求是实现搜索栏的功能,我可以在其中过滤和搜索 UITableView 的数据。我怎样才能做到这一点?我编写了一半的代码,但它不起作用,代码如下。

import UIKit
import SwiftyJSON
import SDWebImage


class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchResultsUpdating,UISearchBarDelegate {
@IBOutlet weak var tableView: UITableView!
var count : Int = 0
var searchActive : Bool?
var selectedCategoryList = [JSON?]()
var filterSelectedCategoryList = [JSON?]()
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
passJson()

searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
searchController.searchBar.sizeToFit()
self.tableView.tableHeaderView = searchController.searchBar
searchController.searchBar.delegate = self
self.tableView.reloadData()

// Do any additional setup after loading the view, typically from a nib.
}




func updateSearchResults(for searchController: UISearchController) {




}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filterSelectedCategoryList = selectedCategoryList.filter { titles in
return (titles?["title"].stringValue.lowercased().contains(searchText.lowercased()))!
}
tableView.reloadData()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

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)
// 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 && searchController.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 && searchController.searchBar.text != ""{

cell.label.text = filterSelectedCategoryList[indexPath.row]?["healerName"].stringValue

}else{
cell.label.text = selectedCategoryList[indexPath.row]?["healerName"].stringValue
}


}
return cell
}



}

最佳答案

尝试实现 UISearch Bar Delegate 方法,但在此之前在 viewDidLoad 中将 searchBar.delegate 设置为 self .

override func viewDidLoad() {
super.viewDidLoad()
passJson()

searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
searchController.searchBar.sizeToFit()

//Set the delegate of searchBar
searchController.searchBar.delegate = self

self.tableView.reloadData()
}

现在实现 UISearchBarDelegatesearch Bar(_: text Did Change: ) 方法,并在该方法中过滤数组。

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filterSelectedCategoryList = selectedCategoryList.filter { titles in
return (titles?["healerName"].stringValue.lowercased().contains(searchText.lowercased()))!
}
tableView.reloadData()
}

关于ios - 如何在数组类型为 JSON 时实现自定义搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42829464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com