如何根据文本字段的搜索结果在表格视图中显示行
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
【讨论】:
我问了什么......你发布了什么......它太混乱了以上是关于如何根据文本字段的搜索结果在表格视图中显示行的主要内容,如果未能解决你的问题,请参考以下文章