【问题标题】:Swift DidSelectRowAt not firingSwift DidSelectRowAt 没有触发
【发布时间】:2017-01-26 06:40:28
【问题描述】:

我有一个项目,有几个不同的 VC...其中两个有 TableViews

第一个效果很好,我在那里有一个自定义视图等。

第二个也是自定义的,它可以很好地填写信息,但与第一个不同......我无法点击它来继续下一个 VC

我已经正确设置了 Delegate 和 DataSource。我的项目中有另一个带有 tableview 的 VC,它工作得很好。我能想到的第一件事可能是阻止它工作是 UILabel 占据了 90% 的单元格,但我不认为是这样,因为我将标签做得很小并尝试点击它,但它仍然不会击中断点。

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

    let row = indexPath.row

    selectedService = serviceArray[row].serviceID! as String

    if selectedService != "" {

      self.performSegue(withIdentifier: "fromCardDetailsToEditService", sender: self)

    }
  }

我不知道这是否重要但是...我所在的 VC 位于选项卡栏控制器和导航栏控制器中。我在标签栏中的 performSegue 是否重要?而且这个按钮不是标签栏项目?

【问题讨论】:

  • 你确定第二个VC设置为table view的数据源和delegate吗?
  • 所以在拥有 TableView 的 VC(我试图离开的 VC)中,我放入了 ViewDidLoad... self.tableView.delegate = self 和 self.tableView.dataSource = self 。 ..那是我在其他 VC 上使用 tableView 的地方..我需要将这两行移到自定义 TableViewCell 类吗?
  • 不,它与表格视图单元格无关。这基本上意味着问题不是因为您没有设置委托。
  • @Sweeper 如果这有帮助...如果我用两根手指我可以让它开火...但我不知道为什么

标签: swift swift3


【解决方案1】:

您的UIViewController 上是否有任何GestureRecognizer,因为在GestureRecognizer 的情况下tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 不会被调用。

【讨论】:

  • 是的,我不知道中断的 didSelectRowAt
  • 那么请为您的 UIVIewController 移除 GestureRecognizer,然后再试一次并检查是否会调用 tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)。
  • 是的,解决了它,但理想情况下我想同时拥有这两者......我正在使用那个手势识别器来关闭键盘
  • 要关闭键盘,您可以触摸事件。
【解决方案2】:

我想出了如何拥有我的手势识别器和 didSelectRowAt。

 let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(CardDetailsViewController.dismissKeyboard))
view.addGestureRecognizer(tap)

这是我已经拥有的,这导致了冲突。

为了解决这个问题,这条简单的线让我可以关闭键盘并能够点击我的单元格。

tap.cancelsTouchesInView = false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多