【问题标题】: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

标签: json swift uitableview uitextfield


【解决方案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
    }
    
    
}

【讨论】:

  • 我问了什么......你发布了什么......它太混乱了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
相关资源
最近更新 更多