长按选择的 Swift 3.0 表格视图单元格
Posted
技术标签:
【中文标题】长按选择的 Swift 3.0 表格视图单元格【英文标题】:Swift 3.0 Table View Cell Selected by Long Press 【发布时间】:2017-05-26 21:11:14 【问题描述】:我有一个手势识别器可以关闭我的键盘,但这会妨碍 tableView didSelectAtRow 因为 tableView 无法识别点击,除非它是长按。当我在模拟器中运行它并轻轻点击 tableViewCell 时,它注册为点击以关闭键盘,而不是点击 tableView。但是,如果我在模拟器中点击并按住一段时间,它将关闭键盘并注册为 tableView 的 didSelectAtRow。这类似于问题UITableView clicked and no cell selected,but long press trigger cell selected,但我不知道如何使用Objective-C。我想知道是否有人对我的问题有解决方法。我在想是否有一种方法可以识别我在 tableView 中轻按,将取消 gestureRecognizer,但我不知道如何继续。
这是我目前所拥有的:
override func viewDidLoad()
super.viewDidLoad()
searchBar.delegate = self
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(AddressVC.hideKeyboard))
tapGesture.cancelsTouchesInView = false
//searchResultsTableView.addGestureRecognizer(tapGesture)
self.view.addGestureRecognizer(tapGesture)
func hideKeyboard()
self.view.endEditing(true)
【问题讨论】:
将 Obj-C 翻译成 Swift 的快速指南:[a b:c]
变为 a.b(c)
。
【参考方案1】:
手势识别器会捕获您的单击,并且不会转发到表格视图。为什么不使用 UITableViewDelegate 的 didSelectCell 函数在选择单元格时关闭键盘?
否则,您可能需要实现 UIGestureRecognizerDelegate 并适当地处理这种情况。由于您可能不检查手势识别器 touch 是否已启动或 endet,因此只要您在触摸,您的函数就会不断被调用。
因此,当您希望长按只会被触发时,它也会触发。如果您想使用多个手势识别器并且它们不应该一起触发,您可能需要设置其他识别器的 requires(to fail)。
【讨论】:
我正在使用手势识别器来关闭键盘,因为这是我唯一能想到的在未选择 tableView 时关闭键盘(用户在 tableView 外部点击而不选择单元格)。我正在使用搜索栏,所以我不知道该怎么做(尽管我可以探索那个选项)。您提到“设置其他识别器的要求(失败)”,我该怎么做呢? 键盘本身的完成按钮怎么样?您可以要求一个手势识别器仅在另一个手势识别器失败时触发。通过这样做,您可以防止单击手势识别器在长按触发时不会触发。它仍然无法解决您无法再触摸单元格的问题。为此,您必须实现手势识别器委托,获取艰难的位置并手动检查它是否在 tableview 单元格内,然后不要让识别器捕获触摸。可能还有一种转发触摸的方法,但您必须查看文档。 看看 IQKeyboardManager 库。它可以很好地处理键盘内容,并免费为您提供键盘工具栏上的完成按钮。还要让您的键盘显示完成或返回按钮。那可能更方便。另一种解决方案可能是在键盘出现时在整个 tableview 顶部添加一个 UIView 并将手势识别器添加到此视图。然后一旦它被点击并且你关闭了键盘,删除视图。 我的键盘上已经有一个搜索按钮。但我不确定我是否理解这有什么帮助。您提到我可以防止单击手势在长按触发时不会触发,但是当用户通过点击选择表格单元格时,这不会起作用吗?您还提到在 tableView 之上使用 UIView 并在向视图添加手势识别器之后。这与在 tableView 中点击不会选择单元格(因为只有长按会)是相同的问题。如果我的解释正确,请告诉我。 您必须为视图创建一个@IBOutlet 并将其命名为不同于“view”的名称,因为每个 UIViewController 已经有一个名为“view”的属性。然后调用“myCustomView.addGesture...”以上是关于长按选择的 Swift 3.0 表格视图单元格的主要内容,如果未能解决你的问题,请参考以下文章
调整 TableView 大小时,Swift 3.0 表格单元格未填充
来自 URL 的 Swift 表格视图图像在选择单元格之前不会显示
如何根据步进值而不是 swift 3 中单元格的物理选择来选择表格视图的单元格?