我已经进入了一段时间,我在相关帖子中发现的任何内容似乎都无法解决。 我以编程方式将表添加到自定义UIView中。表格和行文本显示正确,但是当我在模拟器上运行并尝试单击任何行时,didSelectRowAtIndexPath和willdSelectRowAtIndexPath都不会触发。
我的代码的相关位如下:
import UIKit
import AVFoundation
@IBDesignable
class PerformanceQuestionView: UIView, UITableViewDelegate, UITableViewDataSource {
var optionsTable = UITableView(frame: CGRectMake(10,200,250,200))
var optionItems = ["One", "Two", "Three", "Four"]
convenience init(rect: CGRect, performanceQuestion:PerformanceQuestion?) {
self.init(frame: rect)
NSLog("PerformanceQuestionView.init()")
self.optionsTable.dataSource = self
self.optionsTable.delegate = self
self.optionsTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
self.optionsTable.allowsSelection = true
}
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
NSLog("numberOfRowsInSection")
return optionItems.count
}
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
NSLog("cellForRowAtIndexPath")
var cell:UITableViewCell = self.optionsTable.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
cell.textLabel.text = self.optionItems[indexPath.row]
return cell
}
func tableView(tableView: UITableView!, willSelectRowAtIndexPath indexPath: NSIndexPath!) -> NSIndexPath! {
NSLog("You will select cell #\(indexPath.row)!")
return indexPath
}
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
NSLog("You selected cell #\(indexPath.row)!")
}
override func layoutSubviews() {
super.layoutSubviews()
self.addSubview(optionsTable)
}
}
答案 0 :(得分:22)
删除TapGestureRecognizer对我有用!!!
# Returns a queryset
permissions = Permission.objects.all()
# Turns it into a list
permissions = list(permissions)
# Add the results to the many to many field (notice the *)
group = MyGroup.objects.get(name='test')
group.permissions.add(*permissions)
答案 1 :(得分:11)
原因可能是,您在视图中使用平移手势。像AAA提到删除你的平移手势就可以了。但如果您仍想使用平移手势,则可以执行以下操作
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)
tap.cancelsTouchesInView = false
制作cancelsTouchesInView,false将启用你所有的点击。
答案 2 :(得分:3)
删除感叹号:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
}
答案 3 :(得分:0)
我长时间遇到同样的问题,我在创建UIView类时以编程方式认为它是UITableView中的一个错误。
我的临时解决方案虽然不是一个好主意,但它确实有效。它是按一个单元大小的按钮放置一个协议调度的动作,以实现至少模拟这个动作。
这不是一个好习惯,但不能长时间呆在那里。
答案 4 :(得分:0)
这在Swift 3中已被弃用:
override func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
...
}
并替换为:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
...
}
答案 5 :(得分:0)
对于Swift 3.0,您需要完全使用此功能:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//Input your code here
}
仔细查看以确保您使用此功能。如果您有NSIndexPath,或者在tableView之前没有_但编译器将无效,则编译器不会抱怨。所以使用这个函数,放入一个断点,当你点击一行时你会看到它到达那个点。
我正在使用静态表(所有静态内容单元格)对此进行测试。
答案 6 :(得分:0)
我尝试了这个问题中列出的所有方法和其他方法。我终于从我的故事板中删除了该表并重新开始。
在我的故事板中,我添加了一张原型单元格。我将ViewController连接到表。我将表连接到我的dataSource和委托方法。
我在Attributes Inspector中命名了原型标识符。
这对我有用。我显然没有任何代码可以改变。