我选择UIAlertController
时尝试提示UITableViewCell
。我已检查了所有与故事板相关的问题,例如Selection: Single Selection
,甚至在tableView.allowsSelection = true
的顶部设置了viewDidLoad()
。我还检查了使用didDeselect
而不是didSelect
的问题。
奇怪的是,当我用两根手指同时敲击它时或者当我按下它一段较长的时间(大约2秒然后释放)时,单元格才会选择。这是一个已知的问题吗?
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("Tap registered")
}
任何数量的帮助将不胜感激。
答案 0 :(得分:1)
由于这个问题已经存在很长时间了,所以我将把解决方案留给其他遇到此问题的人,因为我使用这种方法并且效果很好。 这是我的代码:
对于tableViewCell
首先,声明一个变量,我们检查null以避免表崩溃
var tapOnCell: (() -> Void)?
然后在awakeFromNib块中,因此我们在此处创建UITapGestureRecognizer进行轻击操作,该手势需要我们在单元格上轻击1次。
let gesture = UITapGestureRecognizer(target: self, action: #selector(tapOnContenView))
gesture.numberOfTapsRequired = 1
contentView.addGestureRecognizer(gesture)
然后创建如下所示的函数
@objc func tapOnContenView() {
if let tapOnCell = self.tapOnCell {
tapOnCell()
}
}
所以我们现在在tableViewCell上结束了,现在该是tableView了
对于tableView(UITableViewDataSource)
我们在tableViewCell上创建并在此处使用的调用函数
cell.tapOnCell = {
self.tapOnSingleCell(indexPath: indexPath)
}
但是首先,我们需要为单击单元格时要执行的动作创建函数,对我来说,我想单击单元格时转到另一个viewController。
func tapOnSingleCell(indexPath: IndexPath) {
let jobDetail: JobDetailViewController =
JobDetailViewController.newInstance(storyboardName: .jobSearch)
let job = self.relatedList[indexPath.row]
}
希望此解决方案对您有所帮助,也对我有帮助。
答案 1 :(得分:0)
我遇到了类似的问题,但是看到其他帖子指出存在父视图的UIGesture Recognizer是问题所在。我就是这样做的。手势识别器用于关闭键盘。因此,为了确保它的价值,请确保在UITableView中使用UIGestureRecognizer时要小心。
答案 2 :(得分:0)
您只需要使用:
tap.cancelsTouchesInView = NO;
代码:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(yourFunctionOnTap)];
tap.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tap];