【问题标题】:UITableViewController's didSelectRowAtIndexPath doesn't workUITableViewController 的 didSelectRowAtIndexPath 不起作用
【发布时间】:2017-07-17 02:36:45
【问题描述】:

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

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)

这也不行。

【问题讨论】:

  • 你设置代理了吗?
  • Xcode 使用的是什么版本?当您说您正在使用UITableViewController 时,您需要覆盖默认实现,这意味着您需要该方法的关键字override。你的更新是否写得不够清楚override
  • 检查delegate是否与viewController连接
  • @OOPer 是的,我应该重写那个方法。
  • 根据您接受的答案,您正在使用 Swift 2。您真的不应该再使用它了。您需要升级到 Swift 3,因为 Swift 4 现在处于测试阶段。

标签: ios swift uitableview


【解决方案1】:

对于 Swift 3

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

一件事确保您的 tableView single selection 属性被选中...

【讨论】:

  • 问题清楚地表明他们正在使用UITableViewController。您不需要使用UITableViewController 设置委托或数据源。
【解决方案2】:

还要检查 Storyboard 中表格视图的 AttributeInspector 中的 tableView 选择。应该选择单选。

【讨论】:

    【解决方案3】:

    由于您使用的是 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的,之前不知道有什么区别。
    【解决方案4】:

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

    Var array[“Swift”, “IOS”]
    
    
    DidSelect{
    
    Switch: array[indexpath.row]
    Case 3:
                Print(“ u selected /(indexpath.row)”)
         PerformSegue.........
    Case 4 and so on.....
    

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 2012-08-22
      • 1970-01-01
      • 2017-03-22
      相关资源
      最近更新 更多