这是我应用的流程:
首先,将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是否正确填充和滚动;当我点击一个单元格时它就不会做任何事情。
更新
我发现由于某种原因,我可以在按住它们时选择细胞。这不是我想要的,所以有人知道如何解决这个问题吗?
答案 0 :(得分:19)
我刚刚使用您的代码创建一个简单的表,选择工作正常并按预期注销HELLO。您可以在属性检查器中检查选择的值吗?这是我的,选择设置为单选。
这是我用于简单表格的代码
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()
你可以尝试一下。