我试图在选择UITableViewCell
时显示UIAlertController
。我已经检查了所有与故事板相关的问题,例如Selection: Single Selection
,甚至在viewDidLoad()
的顶部设置了tableView.allowsSelection = true
。我还检查了使用didDeselect
而不是didSelect
的问题。
奇怪的是,只有当我同时用两根手指点击它或当我按下它更长的时间(大约 2 秒然后释放)时,单元格才会选择。这是一个已知问题吗?
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("Tap registered")
}
任何数量的帮助将不胜感激。
我遇到了类似的问题,但看到其他帖子指出附加到父视图的 UIGesture 识别器是问题所在。我就是这样做的。手势识别器用于关闭键盘。因此,对于值得一提的是,请确保在UITableView中使用UIGestureRecognizer时要小心。
由于这个问题问题已经很长时间了,所以我将把我的解决方案留给遇到这个问题的其他人,因为我使用这种方法并且它工作正常。这是我的代码:
对于表视图单元格
首先,声明一个变量,我们检查 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的时候了
对于表视图 (UITableViewDataSource)
调用我们在tableViewCell上创建的函数并在此处使用它
cell.tapOnCell = {
self.tapOnSingleCell(indexPath: indexPath)
}
但首先,我们需要创建您在单击单元格时要执行的操作函数,对我来说,我想在单击单元格时转到另一个视图控制器。
func tapOnSingleCell(indexPath: IndexPath) {
let jobDetail: JobDetailViewController =
JobDetailViewController.newInstance(storyboardName: .jobSearch)
let job = self.relatedList[indexPath.row]
}
我希望这个解决方案对您有所帮助,也对我有所帮助,加油。
你只需要使用:
tap.cancelsTouchesInView = NO;
法典:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(yourFunctionOnTap)];
tap.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tap];