从UITableViewController

时间:2018-03-06 01:08:48

标签: ios swift uitableview swift4

我正在尝试使用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并且实际上能够使用所选行的问题。

2 个答案:

答案 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

如果使用“界面”构建器

,您可能还需要在“界面”构建器中查看上述两个设置