UITableViewController的didSelectRowAtIndexPath不起作用
我使用的是UITableViewController
,我重写了下面的方法,并尝试在用户选择不同的行时启用不同的segues。UITableViewController的didSelectRowAtIndexPath不起作用
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
。
更新:
我试图取代:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath)
有了:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
而且这不也行。
由于您正在使用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
}
}
谢谢!我应该重写该方法。我读的教程是关于UIViewController的,我不知道之前的区别。 –
仅供参考 - 这是Swift 2代码,不是Swift 3. – rmaddy
好吧,我看到你的代码。你正在试图打印一个字符串,并同时继续。但是你选择继续哪个对象。它应是一个阵列或其他东西例如:
瓦尔阵列[“快速”,“IOS”]
DidSelect {
开关:阵列[indexpath.row] 情况3: 打印( “u selected /(indexpath.row)”) PerformSegue ......... 案例4等......
您是否设置了委托? – gaskbr
什么版本的Xcode正在使用?当你说你正在使用'UITableViewController'时,你需要重写默认的实现,这意味着你需要关键字'override'来实现这个方法。无论是否放置'override',您的_Update_都不够清楚。 – OOPer
检查委托是否与viewController连接 –