2017-07-17 44 views
2

我使用的是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

enter image description here

更新

我试图取代:

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

有了:

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

而且这不也行。

+0

您是否设置了委托? – gaskbr

+0

什么版本的Xcode正在使用?当你说你正在使用'UITableViewController'时,你需要重写默认的实现,这意味着你需要关键字'override'来实现这个方法。无论是否放置'override',您的_Update_都不够清楚。 – OOPer

+0

检查委托是否与viewController连接 –

回答

3

为SWIFT 3

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

一件事确保您tabeView single selection属性选择..

+0

这个问题清楚地表明他们正在使用'UITableViewController'。你不需要用'UITableViewController'设置委托或者数据源。 – rmaddy

+0

是的,我忘了它。谢谢你指出我.. @ rmaddy – Foolish

1

由于您正在使用UITableViewControlleroverride该功能。否则,如果您在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 
     } 
    } 
+0

谢谢!我应该重写该方法。我读的教程是关于UIViewController的,我不知道之前的区别。 –

+0

仅供参考 - 这是Swift 2代码,不是Swift 3. – rmaddy

1

同时检查的tableView的选择在AttributeInspector表格视图您的故事板。它应该被选择为单个选择。 enter image description here

1

好吧,我看到你的代码。你正在试图打印一个字符串,并同时继续。但是你选择继续哪个对象。它应是一个阵列或其他东西例如:

瓦尔阵列[“快速”,“IOS”]

DidSelect {

开关:阵列[indexpath.row] 情况3: 打印( “u selected /(indexpath.row)”) PerformSegue ......... 案例4等......

相关问题