为什么我不能选择TableView单元格?

时间:2015-10-11 07:09:16

标签: swift uitableview

这是我应用的流程:

首先,将TableView设置为隐藏。屏幕中央有一个UITextField。当用户键入内容并点击Go时,将运行以下代码:

self.view.layoutIfNeeded()
UIView.animateWithDuration(0.5, animations: {

    self.textFieldConstraint.constant = -230
    self.tableView.hidden = false
    self.goButton.hidden = true
    self.view.layoutIfNeeded()

}, completion: nil)

此时,将填充tableview。选择行时,我需要操作填充它的数据。

然而,当我点击一个单元格时,绝对没有任何反应。

我做错了什么?

我的TableView代码在这里:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell: SearchResultsTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! SearchResultsTableViewCell

    cell.label.text = searchResultsNames[indexPath.row]

    return cell
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return searchResultsUrls.count

}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    print("HELLO")

}

而且,我已正确设置了dataSource和委托。

我还想澄清一下tableView是否正确填充和滚动;当我点击一个单元格时它就不会做任何事情。

更新

我发现由于某种原因,我可以在按住它们时选择细胞。这不是我想要的,所以有人知道如何解决这个问题吗?

7 个答案:

答案 0 :(得分:19)

我刚刚使用您的代码创建一个简单的表,选择工作正常并按预期注销HELLO。您可以在属性检查器中检查选择的值吗?这是我的,选择设置为单选。

enter image description here

这是我用于简单表格的代码

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!

    var searchResults = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        searchResults.append("Testing 1")
        searchResults.append("Testing 2")
        searchResults.append("Testing 3")
        searchResults.append("Testing 4")
        searchResults.append("Testing 5")

        tableView.dataSource = self
        tableView.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath)
        cell.textLabel?.text = searchResults[indexPath.row]

        return cell
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return searchResults.count
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("HELLO")
    }
}

我也尝试隐藏并显示tableView,这对选择没有任何影响。

编辑&解决方案:

在下面的评论中,我们发现该问题与视图上的tapGestureRecogniser有关,这是由op识别的,只能通过按住单元格来进行选择。在做出选择之前,手势必须失败,操作设法通过引用其他SO Answer来解决问题

答案 1 :(得分:6)

如果使用“点击”手势,则无法选择表格单元格。 (但是,如果单击并向右拖动单元格,则可以选择它。)

先检查手势。

如果您的代码有self.tableView.allowsSelection = false,请将false替换为true或删除此行。

答案 2 :(得分:3)

我的问题是由视图控制器本身的轻敲手势识别器引起的(我有一个BaseTableViewController,我正在扩展)。可能是它干扰了UITableView的手势识别器。

答案 3 :(得分:2)

对我来说,我正在实现另一个选择行方法,所以我删除它并键入" didSelect ..."并在建议的方法中选择第一个,这对于swift 3:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("Row #: \(indexPath)")
}

答案 4 :(得分:1)

viewDidLoad或您设置视图的任何位置,确保您的表格视图甚至允许选择。这可以通过allowSelection property来控制。

类似的东西:

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.allowsSelection = true
}

答案 5 :(得分:0)

如果您有手势识别器,只需键入gestureRecognizer.cancelsTouchesInView = false

答案 6 :(得分:-1)

我遇到了和你一样的问题,并通过删除以下代码解决了这个问题

self.view.layoutIfNeeded()

你可以尝试一下。