我想将textField
用作SearchBar
作为我的应用程序。我遵循了youtube的教程,并在github获得了它的源代码。但不幸的是,它不适用于我的应用程序。我可以键入文本,但是它不能过滤我键入的任何内容。我的代码如下,供您参考。希望你能帮助我解决我的问题。非常感谢。
var participants: [Attendee]!
var filteredParticipants = [Attendee]()
override func viewDidLoad() {
super.viewDidLoad()
ParticipantTableView.delegate = self
ParticipantTableView.dataSource = self
searchAttendeesTextField.delegate = self
searchAttendeesTextField.addTarget(self, action: #selector(searchRecords(_ :)), for: .editingChanged)
}
//MARK:- UITextFieldDelegates
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
searchAttendeesTextField.resignFirstResponder()
return true
}
//MARK: - searchRecords
@objc func searchRecords(_ textField: UITextField) {
self.filteredParticipants.removeAll()
if textField.text?.count != 0 {
for participant in participants {
if let participantToSearch = textField.text{
let range = participant.lastName.lowercased().range(of: participantToSearch, options: .caseInsensitive, range: nil, locale: nil)
if range != nil {
self.filteredParticipants.append(participant)
}
}
}
}else {
for participant in participants {
filteredParticipants.append(participant)
}
}
ParticipantTableView.reloadData()
}
// MARK: TABLE VIEW DATA SOURCE
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return participants.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "FoldingCell")
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: "FoldingCell")
}
// cell?.textLabel?.text = filteredParticipants[indexPath.row]
return cell!
}
答案 0 :(得分:1)
您的ParticipantTableView
数据应使用filteredParticipants
数组加载。
同时在participants
数组中添加数据时,请在filteredParticipants
数组中添加所有数据并重新加载ParticipantTableView
。
然后使用tableview dataSource
方法:
// MARK: TABLE VIEW DATA SOURCE
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredParticipants .count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "FoldingCell")
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: "FoldingCell")
}
let attendeeSingleData = filteredParticipants[indexPath.row]
cell?.textLabel?.text = attendeeSingleData."The data that you want to add"
return cell!
}
Attendee
必须是您创建的结构或类,并且必须根据字段添加数据。
请不要从participants
数组中删除数据,而要像在filteredParticipants
数组中所做的那样继续更改数据。
还有一件事,您的tableView
名称是ParticipantTableView
,这不好。用lowerCamelCase
作为participantTableView
创建方法。
要了解更多信息,您可以浏览以下有用的网址:
答案 1 :(得分:0)
您好,您需要使用TextField Delegate方法。 你可以用这个
func textFieldDidBeginEditing(_ textField: UITextField) {
//you will get here updated entered text
print("TextField did begin editing method called", textField.text)
}