在表控制器中有显示电话联系的表格视图和搜索栏。我实现了用于搜索栏的代码来过滤namedName数组,它的工作原理很好,但是当我单击所搜索的单元格时,它没有显示正确的信息,它仅显示了第一行的信息(恰好是第一个索引)。问题是我该如何解决这个问题?
数据模型:
struct ContactStruct {
let identifier : String
let thumbnailImageData : UIImage
let givenName : String
let familyName : String
let phoneNumbers : String
let emailaddresses : String
}
主视图控制器:
class NewContactViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
var contactsData = [ContactStruct]()
var searchedContact = [String]()
var searching = false
@IBOutlet weak var tblMain: UITableView!
@IBOutlet weak var contactSearchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
}
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
let story = uistoryboard(name: "Main",bundle: nil)
let vc = story.instantiateViewController(withIdentifier: "InsertContactViewController") as! InsertContactViewController
vc.strEditFitstName = contactsData[indexPath.row].givenName
vc.stridentifier = contactsData[indexPath.row].identifier
self.navigationController?.pushViewController(vc,animated: true)
}
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
if searching {
return searchedContact.count
} else {
return contactsData.count
}
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "testCell") as! NewContactCell
let contactToDisplay = contactsData[indexPath.row]
contactToDisplay.familyName
cell.lblLName.text = contactToDisplay.givenName
return cell
}
搜索栏方法:
extension NewContactViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar,textDidChange searchText: String) {
let givenNames = contactsData.map { $0.givenName }
searchedContact = givenNames.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased()})
searching = true
tblMain.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searching = false
searchBar.text = ""
tblMain.reloadData()
}
}