gio*_*eli 3 uitableview ios uitapgesturerecognizer swift
我想通过点击单元格标签(而不是didSelectRowAt)来编辑标签文本。点击标签函数 ( 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
}
Run Code Online (Sandbox Code Playgroud)
这是函数:
var customTableViewController = ToDoItemsCell()
@objc func toDoItemLabelTapped() {
print(customTableViewController.toDoItemLabel.text)
}
Run Code Online (Sandbox Code Playgroud)
错误如下:
致命错误:隐式解包可选值时意外发现 nil
如何让点击手势传递单元格的标签文本?
问题出在你的customTableViewController变量上。它指的是从未出现在表视图中的无用单元格。摆脱它。这不是必需的。
通过点击手势获取单元格。点击手势有一个view属性。由于您将点击手势添加到单元格,因此它的view属性将是单元格。
@objc func toDoItemLabelTapped(_ gesture: UITapGestureRecognizer) {
let cell = gesture.view as! ToDoItemsCell
print(cell.toDoItemLabel.text)
}
Run Code Online (Sandbox Code Playgroud)
您还需要修复 中的选择器cellForRowAt。摆脱aSelector变量。
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(toDoItemLabelTapped))
Run Code Online (Sandbox Code Playgroud)
除非您由于某种原因实际实现了手势委托方法,否则请删除该行:
tapGesture.delegate = self as? UIGestureRecognizerDelegate
Run Code Online (Sandbox Code Playgroud)
同时删除无关的行:
tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
Run Code Online (Sandbox Code Playgroud)
另请注意,单元格会被重用,因此当用户滚动时,您会向每个单元格添加越来越多的点击手势。您可能希望避免向任何单元格添加多个点击手势。
| 归档时间: |
|
| 查看次数: |
1106 次 |
| 最近记录: |