UISearchbar 并在查看控制器 xcode swift 中传递数据

Posted

技术标签:

【中文标题】UISearchbar 并在查看控制器 xcode swift 中传递数据【英文标题】:UISearchbar and passing data in View a controller xcode swift 【发布时间】:2018-03-26 19:30:18 【问题描述】:

所以我有一个表格视图和一个搜索栏,我实现了搜索栏的代码来过滤我的数组,它工作得很好,但是当我点击我搜索的单元格时,它不显示正确的信息,它只显示第一行(第一个索引)的信息,注意我使用全局数组将数据从我的表视图传递到视图控制器,所以有人可以告诉我这段代码中我的问题在哪里,我该如何解决它。

class SciencesVC: UIViewController ,UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate

    @IBOutlet weak var searchBar: UISearchBar!
    @IBOutlet weak var TableView: UITableView!

    var data = ["د.غادة المطيري", "د.حياة سندي"]

    var filteredData = [String]()
    var inSearchMode = false

    override func viewDidLoad() 
        super.viewDidLoad()

        TableView.delegate = self
        TableView.dataSource = self
        searchBar.delegate = self
        searchBar.returnKeyType = UIReturnKeyType.done

        // Do any additional setup after loading the view.
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        if inSearchMode 

            return filteredData.count
        

        return data.count

    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        if let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? DataCell 

            let text: String!

            if inSearchMode 

                text = filteredData[indexPath.row]

             else 

                text = data[indexPath.row]
            

            cell.congigureCell(text: text)

            return cell

         else 

            return UITableViewCell()
        

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

        if searchBar.text == nil || searchBar.text == "" 

            inSearchMode = false

            view.endEditing(true)

            TableView.reloadData()

         else 

            inSearchMode = true

            filteredData = data.filter($0.contains(searchBar.text!))

            TableView.reloadData()
        
    

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

        myIndex =  indexPath.row

        performSegue(withIdentifier: "segue", sender: self)
    

值是 SciencesVC 中的全局数组:

var Names = ["د.غادة المطيري ","د.حياة سندي "]
var majors = ["الكيمياء","عالمة صيدلية "]
var Communiction = ["-","-",""]
var myIndex = 0

这里是详细的 UIViewController 来显示信息

class ViewController: UIViewController 
    @IBOutlet weak var Name: UILabel!
    @IBOutlet weak var myImageView: UIImageView!
    @IBOutlet weak var major: UILabel!
    @IBOutlet weak var info: UITextView!
    @IBOutlet weak var twitter: UILabel!

    override func viewDidLoad() 
        super.viewDidLoad()

        Name.text = Names[myIndex]
        info.text = infos [myIndex]
        myImageView.image = UIImage(named: Names[myIndex] + ".png")
        twitter.text = Communiction[myIndex]
    

【问题讨论】:

【参考方案1】:

抱歉,我使用的是 iPhone,但请尝试一下: 在didSelectRowAt 中,您必须检查您是否使用 searchBar 进行过滤。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

if inSearchMode 
                myIndex =  data.index(of: filteredData[indexPath.row])
             else 
                myIndex =  indexPath.row
            

        performSegue(withIdentifier: "segue", sender: self)
    

【讨论】:

非常感谢它现在可以正常工作了,我非常感谢您的帮助,您让我度过了愉快的一天 @ameerahalharbi 很高兴为您提供帮助!请将我的答案标记为已选中。 这是一个比我更优雅的答案! :)【参考方案2】:

您可以使用prepare(for segue: UIStoryboardSegue, sender: Any?) 方法将必要的索引发送到detailViewController。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    super.prepare(for: segue, sender: sender)

    guard let detailViewController = segue.destination as? UIViewController else  fatalError() 

    guard let selectedCell = sender as? TableViewCell else  fatalError() 

    guard let indexPath = tableView.indexPath(for: selectedCell) else  fatalError() 

    if inSearchMode 
        selectedIndex = data.index(of: filteredData[indexPath.row])!
     else 
        selectedIndex = indexPath.row
    

    detailViewController.myIndex = selectedIndex


【讨论】:

以上是关于UISearchbar 并在查看控制器 xcode swift 中传递数据的主要内容,如果未能解决你的问题,请参考以下文章

导航控制器中的 UISearchBar 和两个按钮

XCode 源代码控制:查看一个文件的更改

UISearchBar取消按钮Xcode 4.3?

UISearchBar 没有出现

当 UISearchbar 点击时从私人有效用户设置中读取

在 IOS 8、Xcode 6 中插入 UISearchBar [关闭]