使用 UITapGestureRecognizer 从点击的单元格中获取标签文本
Get label text from tapped cell with UITapGestureRecognizer
我想在点击单元格标签时编辑标签文本(不是 didSelectRowAt
)。 Tapped 标签函数 (toDoItemLabelTapped
) 显示为 nil。
虽然 UITapGestureRecognizer
效果很好,但它没有通过标签文本。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ToDoItemsCell
cell.delegate = self
cell.textField.delegate = self
cell.textField.isHidden = true
cell.toDoItemLabel.isUserInteractionEnabled = true
let aSelector : Selector = Selector(("toDoItemLabelTapped"))
var tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
tapGesture.numberOfTapsRequired = 1
cell.addGestureRecognizer(tapGesture)
tapGesture.delegate = self as? UIGestureRecognizerDelegate
tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
return cell
}
函数如下:
var customTableViewController = ToDoItemsCell()
@objc func toDoItemLabelTapped() {
print(customTableViewController.toDoItemLabel.text)
}
错误如下:
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
如何让点击手势通过单元格的标签文本?
问题出在您的 customTableViewController
变量上。它指的是 table 视图中从未出现过的无用单元格。摆脱它。没必要。
从点击手势获取单元格。点击手势有 view
属性。由于您将点击手势添加到单元格,因此它的 view
属性 将成为单元格。
@objc func toDoItemLabelTapped(_ gesture: UITapGestureRecognizer) {
let cell = gesture.view as! ToDoItemsCell
print(cell.toDoItemLabel.text)
}
您还需要修复 cellForRowAt
中的选择器。删除 aSelector
变量。
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(toDoItemLabelTapped))
除非您出于某种原因实际实现了手势委托方法,否则删除该行:
tapGesture.delegate = self as? UIGestureRecognizerDelegate
也去掉多余的线:
tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
另请注意,单元格被重复使用,因此您在用户滚动时向每个单元格添加越来越多的点击手势。您可能希望避免向任何单元格添加一个以上的点击手势。
我想在点击单元格标签时编辑标签文本(不是 didSelectRowAt
)。 Tapped 标签函数 (toDoItemLabelTapped
) 显示为 nil。
虽然 UITapGestureRecognizer
效果很好,但它没有通过标签文本。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ToDoItemsCell
cell.delegate = self
cell.textField.delegate = self
cell.textField.isHidden = true
cell.toDoItemLabel.isUserInteractionEnabled = true
let aSelector : Selector = Selector(("toDoItemLabelTapped"))
var tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
tapGesture.numberOfTapsRequired = 1
cell.addGestureRecognizer(tapGesture)
tapGesture.delegate = self as? UIGestureRecognizerDelegate
tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
return cell
}
函数如下:
var customTableViewController = ToDoItemsCell()
@objc func toDoItemLabelTapped() {
print(customTableViewController.toDoItemLabel.text)
}
错误如下:
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
如何让点击手势通过单元格的标签文本?
问题出在您的 customTableViewController
变量上。它指的是 table 视图中从未出现过的无用单元格。摆脱它。没必要。
从点击手势获取单元格。点击手势有 view
属性。由于您将点击手势添加到单元格,因此它的 view
属性 将成为单元格。
@objc func toDoItemLabelTapped(_ gesture: UITapGestureRecognizer) {
let cell = gesture.view as! ToDoItemsCell
print(cell.toDoItemLabel.text)
}
您还需要修复 cellForRowAt
中的选择器。删除 aSelector
变量。
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(toDoItemLabelTapped))
除非您出于某种原因实际实现了手势委托方法,否则删除该行:
tapGesture.delegate = self as? UIGestureRecognizerDelegate
也去掉多余的线:
tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
另请注意,单元格被重复使用,因此您在用户滚动时向每个单元格添加越来越多的点击手势。您可能希望避免向任何单元格添加一个以上的点击手势。