我正在尝试使用segue中所选行的索引。我有一个UITableViewController作为类类型,所以我知道它有委托和数据源但是当我尝试使用DidSelectRowAt indexPath:indexPath函数时,永远不会调用该函数。任何帮助都会很棒。我已经对此进行了一些研究,其他人已经使用了一个带有TableView的UIView,并没有单独使用TableView。
import UIKit
import GoogleBooksApiClient
class SearchResultsTableViewController: UITableViewController {
var titleFromSearch: String?
var authorFromSearch: String?
var index = 0
var data = [Volume]()
override func viewDidLoad() {
super.viewDidLoad()
.............................
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
................
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
index = indexPath.row
performSegue(withIdentifier: "details", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? DetailsViewController{
destination.titleOfBook = data[index].volumeInfo.title
}
}
}
我仍然保持同样的问题。我真的很感谢所有人的评论和帮助,但我仍然有问题让这个工作。我尝试使用局部变量来使用performSegue传递IndexPath但我仍然遇到调用DidSelectRowAt并且实际上能够使用所选行的问题。
答案 0 :(得分:0)
tableView(_:didSelectRowAt:)
的方法名称必须完全匹配:
func tableView(_ tableView:UITableView,didSelectRowAt indexPath:IndexPath)
如果未正确命名可选委托方法,则不会调用它们。
当您通过调用performSegue(withIdentifier:sender:)
从该方法调用segue时,您可以在sender参数中传递所选单元格的indexPath,然后在prepare(for:sender:)
方法中使用该indexPath
答案 1 :(得分:0)
人们将tableView放在UIView
上以获得更大的灵活性,以便视图还可以包含其他UI元素,如标签,开关和按钮。
对于你的问题,我想你错误地设置了
self.tableView.allowsSelection = false
或
self.tableView.isUserInteractionEnabled = false
如果使用“界面”构建器
,您可能还需要在“界面”构建器中查看上述两个设置