gpt4 book ai didi

arrays - 搜索 UITableView 的多个部分,数组结构数组

转载 作者:行者123 更新时间:2023-11-30 10:49:26 25 4
gpt4 key购买 nike

这里是业余爱好者。我真的希望能够搜索我创建的联系人表格 View Controller 。过去几天我一直在尝试各种不同的想法,但没有任何结果。似乎我能找到的就是如何搜索数组,但我的部分似乎把它全部抛弃了,我只是不够聪明,不知道要修复的代码。我有 Contacts VC,它从一个结构体和一个由 3 个数组组成的数组中派生数据。我有一个数组数组,以便在我的 Tableview 中包含部分。

结构联系人{

var name = String()
var cellPhone = String()
var pager = String()

}

var contacts = [
[Contacts(name: "Name", cellPhone: "Number", pager: "Number"),
Contacts(name: "Name", cellPhone: "Number", pager: "Number") ],

[Contacts(name: "Name", cellPhone: "Number", pager: "Number"),
Contacts(name: "Name", cellPhone: "Number", pager: "Number") ],

[Contacts(name: "Name", cellPhone: "Number", pager: "Number"),
Contacts(name: "Name", cellPhone: "Number", pager: "Number") ]]

在我的 Contacts TableViewController 中,我添加了一个 SearchBar 并定义了一个新变量。

  var filteredContacts = [[Contacts]]()

并添加了这个功能

func updateSearchResults(for searchController: UISearchController) {
if searchController.searchBar.text! == "" || searchController.searchBar.text == nil {
isSearching = false
filteredContacts = contacts
} else {
// Filter the results
isSearching = true

filteredContacts = [contacts.joined().filter { $0.name.lowercased().contains(searchController.searchBar.text!.lowercased()) }]
}

self.tableView.reloadData()
}




override func numberOfSections(in tableView: UITableView) -> Int {
return myTitles.count
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 40
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if isSearching {
return filteredContacts.count
}
return contacts[section].count

}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! TableViewCell

if isSearching {
cell.column1.text = self.filteredContacts[indexPath.section][indexPath.row].name
cell.column2.text = self.filteredContacts[indexPath.section][indexPath.row].cellPhone
cell.column3.text = self.filteredContacts[indexPath.section][indexPath.row].pager


} else {
cell.column1.text = contacts[indexPath.section][indexPath.row].name
cell.column2.text = contacts[indexPath.section][indexPath.row].cellPhone
cell.column3.text = contacts[indexPath.section][indexPath.row].pager
}

return cell


}


override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

return myTitles[section]
}

最佳答案

@thecloud_of_unknowing

我接受了你所说的并添加了以下内容:

 override func numberOfSections(in tableView: UITableView) -> Int {
if isSearching {
return filteredContacts.count
}

return contacts.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if isSearching {
return filteredContacts[section].count
}
return contacts[section].count

}

整个事情中最困难的部分是弄清楚 searchBar 更新函数的语法以及如何过滤嵌套数组。所以以防万一其他人想知道。老实说,我仍然不完全明白这一切是如何运作的,但我会到达那里。

部分标题没有改变,但至少我可以搜索。

filteredContacts = [contacts.joined().filter { $0.name.lowercased().contains(searchController.searchBar.text!.lowercased()) }]

关于arrays - 搜索 UITableView 的多个部分,数组结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965995/

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