UITableViewController的didSelectRowAtIndexPath不起作用

时间:2017-07-17 02:36:46

标签: ios swift uitableview

我正在使用UITableViewController并覆盖以下方法,并在用户选择不同的行时尝试启用不同的segues。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    print("You selected row #\(indexPath.row)!")
    switch indexPath.row {
    case 3:
        performSegue(withIdentifier: "segue3", sender: self)
    case 8:
        performSegue(withIdentifier: "segue8", sender: self)
    default:
        break
    }
}

但实际上,这种方法永远不会被调用,而且当我选择一行时,打印输出永远不会出现。

我确实启用了单选,启用了用户交互并将委托和数据源设置为控制器本身(使用UITableViewController时自动设置,对吗?)

我使用的是静态单元格,默认为UITableViewCell。视图控制器为UITableViewController

enter image description here

更新

我尝试替换:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath) 

使用:

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

这也不起作用。

5 个答案:

答案 0 :(得分:4)

for swift 3

override  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
    //your code...  
}

并确保您的tabeView single selection属性被选中..

答案 1 :(得分:2)

由于您使用UITableViewController override函数。否则,如果您在ViewController中使用tableView,请确保将delegate设置为ViewController类。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("You selected row #\(indexPath.row)!")
        switch indexPath.row {
        case 3:
            performSegue(withIdentifier: "segue3", sender: self)
        case 8:
            performSegue(withIdentifier: "segue8", sender: self)
        default:
            break
        }
    }

答案 2 :(得分:1)

还要检查Storyboard中表视图的AttributeInspector中tableView的选择。它应该被选择为单一选择。enter image description here

答案 3 :(得分:0)

好的,我看到你的代码。您正在尝试打印字符串并同时进行segue。但是你选择了哪个对象。它应该是一个数组或其他示例:

Var array[“Swift”, “IOS”]


DidSelect{

Switch: array[indexpath.row]
Case 3:
            Print(“ u selected /(indexpath.row)”)
     PerformSegue.........
Case 4 and so on.....

答案 4 :(得分:-1)

可能有几个原因

tableView.allowsSelection = false //must be true

cell.isUserInteractionEnabled = false //must be true