UISearchBar并将数据传递到另一个视图控制器

在表控制器中有显示电话联系的表格视图和搜索栏。我实现了用于搜索栏的代码来过滤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()
   }
}
HU9694 回答:UISearchBar并将数据传递到另一个视图控制器

以下面的代码为例:

            let countriesList = ["African Union","Andorra","Armenia","Austria","Bahamas","Barbados","Belarus","Belgium",]
            @IBOutlet var tblPlace: UITableView!
            @IBOutlet var searchPlace: UISearchBar!
            var selctedCountries:[String] = []
            var filteredData: [String]!

            override func viewDidLoad() {
                    super.viewDidLoad()
                    searchPlace.delegate = self
                    filteredData = countriesList
                }


    func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
            return filteredData.count
        }


    func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            let cell = tableView.dequeueReusableCell(withIdentifier: "ApplyFilterTableViewCell",for: indexPath) as! ApplyFilterTableViewCell

            cell.lblName = filteredData[indexPath.row]

            return cell
        }

    func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
        let story = UIStoryboard(name: "Main",bundle: nil)
        let vc = story.instantiateViewController(withIdentifier: "InsertContactViewController") as! InsertContactViewController
        vc.strEditFitstName = filteredData[indexPath.row]

        self.navigationController?.pushViewController(vc,animated: true)
    }

     func searchBar(_ searchBar: UISearchBar,textDidChange searchText: String) {

            filteredData = searchText.isEmpty ? countriesList : countriesList.filter({(dataString: String) -> Bool in
                // If dataItem matches the searchText,return true to include it
                return dataString.range(of: searchText,options: .caseInsensitive) != nil
            })

            tblPlace.reloadData()
        }
本文链接:https://www.f2er.com/3124274.html

大家都在问