如何根据文本字段的搜索结果在表格视图中显示行

Posted

技术标签:

【中文标题】如何根据文本字段的搜索结果在表格视图中显示行【英文标题】:How to show rows in tableview according to textfield's search result 【发布时间】:2021-04-12 03:45:26 【问题描述】:

最初我可以在 tableview 中显示所有行。现在我只需要显示搜索到的文本字段行...

这里的文本字段和搜索按钮在表格视图之外。现在如果我在文本字段中添加日期并点击搜索按钮,那么我只需要在表格视图中显示包含行的日期如何做到这一点

在 tableview 中显示所有行的代码: postedServicesCall 参数的 from_date 为 nil 然后我需要显示所有行 .. 我可以用下面的代码来做这件事 .. 现在如何显示from_date 中是否有值,那么只有日期包含在 tableview 中的行

 class PageContentViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

@IBOutlet weak var fromDateTextField: MDCTextField!
private var servicesArray = [ServicesModel]()

override func viewDidLoad() 

    postedServicesCall()
    DispatchQueue.main.async 
        self.servicesTableView.reloadData()
    


func postedServicesCall()
    
    let param = ["from_date" : ""]
    APIReqeustManager.sharedInstance.serviceCall(param: param as [String : Any], method: .post, loaderNeed: false, loadingButton: nil, needViewHideShowAfterLoading: nil, vc: self, url: CommonUrl.posted_requests, isTokenNeeded: true, isErrorAlertNeeded: true, isSuccessAlertNeeded: false, actionErrorOrSuccess: nil, fromLoginPageCallBack: nil)  [weak self] (resp) in

        self?.postedServicesData = Posted_services_base_model(dictionary: resp.dict as NSDictionary? ?? NSDictionary())
     
        



func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return servicesArray.count


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "ServicesTableViewCell", for: indexPath) as! ServicesTableViewCell
    cell.serviceTitle.text = servicesArray[indexPath.row].title
    cell.dateLabel.text = servicesArray[indexPath.row].date
    cell.locationLabel.text = servicesArray[indexPath.row].location
    
    return cell


//if i add date in textfield and tap on search.. then with the date how many rows are there should be display in tableview
@IBAction func searchtBtn(_ sender: TransitionButton) 

如果我在文本字段中搜索日期,那么我需要在 tableview 中显示与日期相关的行。如何?

请帮忙写代码

【问题讨论】:

你听说过swift中的Filter方法吗?用它来过滤Array,然后重新加载TableView 【参考方案1】:

试试这个简单的搜索实现

//
//  ViewController.swift
//
//  Created by Rajesh Gandru on 4/12/21.
//

import UIKit
//MARK:- User Model Class
struct User 
    var userName: String?
    var userNumber : String?
    var UserAge : String?

//MARK:-  tableview cell
class ExampleCell:UITableViewCell
    @IBOutlet weak var resultLBLref:UILabel!


class ViewController: UIViewController 
    
    //MARK:- Class Outlets...
    
    @IBOutlet weak var searchtextfeildref: UITextField!
    @IBOutlet weak var tableViewref: UITableView!
    
    //MARK:- Class Properties...
    
    var listArr : [User] = []
    var filteredlistArr :[User] = []
    
    var searchMyOrders = false
    
    //MARK:- View Lyfe cycle starts here..
    
    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.listArr = [User(userName: "Raj", userNumber: "78623", UserAge: "34"),User(userName: "Ram", userNumber: "67467645", UserAge: "22"),User(userName: "Raki", userNumber: "5634534", UserAge: "43"),User(userName: "Raksha", userNumber: "098098", UserAge: "18"),User(userName: "Ravi", userNumber: "7863846", UserAge: "24")]
        self.searchtextfeildref.addTarget(self, action: #selector(self.textFieldDidChange(_:)),
                                          for: UIControl.Event.editingChanged)
    
    
    //MARK:- Textfeild Search
    @objc func textFieldDidChange(_ textField: UITextField) 
        // filter tableViewData with textField.text
        let searchText  = textField.text
        //by_bus_cities_drop_address
        filteredlistArr = self.listArr.filter 
            return (($0.userName?.localizedLowercase.contains(searchText!))! ||
                        $0.userNumber!.localizedLowercase.contains(searchText!))
         ?? []
        
        if(filteredlistArr.count == 0)
            searchMyOrders = false;
         else 
            searchMyOrders = true;
        
        self.tableViewref.reloadData()
    

//MARK:- Tableview Content
extension ViewController : UITableViewDelegate,UITableViewDataSource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        if searchMyOrders 
            return filteredlistArr.count
        else 
            return listArr.count
        
    
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell:ExampleCell = tableView.dequeueReusableCell(withIdentifier: "ExampleCell", for: indexPath) as! ExampleCell
        if searchMyOrders 
            cell.resultLBLref.text = filteredlistArr[indexPath.row].userName
        else 
            cell.resultLBLref.text = listArr[indexPath.row].userName
        
        return cell
    
    
    

【讨论】:

我问了什么......你发布了什么......它太混乱了

以上是关于如何根据文本字段的搜索结果在表格视图中显示行的主要内容,如果未能解决你的问题,请参考以下文章

根据选定的表视图行更新 UILabel

在多节表视图中使用文本字段进行搜索 - Swift

如果找到搜索栏文本,则更改表格视图的字母颜色

iOS:文本字段委托,如何在处理表格视图中的行移动之前自动结束编辑?

在 Tableview 中创建搜索字段

独立的搜索栏和表格视图控制器