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 中传递数据的主要内容,如果未能解决你的问题,请参考以下文章