获取 TableView 中单元格的行触摸 UILabel
Posted
技术标签:
【中文标题】获取 TableView 中单元格的行触摸 UILabel【英文标题】:Get row touched UILabel for cell in TableView 【发布时间】:2016-12-13 12:59:25 【问题描述】:同事们,当我在UITableView
的单元格中按下UILabel
时,我遇到了获取行的问题。
所以,我有
class CellOfFirstTableView: UITableViewCell
我在哪里
@IBOutlet weak var labelChangeSomething: UILabel!
与我工作的那个单元格
class FirstTableViewController: UITableViewController
所以我想为按下的UILabel
获取行,但我不知道该怎么做。我的单元格和新闻操作代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "firstCell", for: indexPath) as! CellOfFirstTableView
let list = sortOfSomething(id: id_something)[indexPath.row]
//tapRecognizer
let tap = UITapGestureRecognizer(target: self, action: #selector(FirstTableViewController.tapFunction))
cell.labelChangeSomething.isUserInteractionEnabled = true
cell.labelChangeSomething.addGestureRecognizer(tap)
return cell
和行动的功能:
func tapFunction(sender:UITapGestureRecognizer)
print("Hello world")
我想得到一排按下的UILabel
(当我按下UILabel
时,我看到“Hello world”,但我想看到UILabel
所在的行。我可以得到一排按下的单元格,但用户只能按UILabel
并且不要按UILabel
未激活的部分单元格。
感谢您的想法!
【问题讨论】:
你能检查单元格的选择吗? 为什么不使用 didSelectRow 方法? @ArtemNovichkov 否,因为当用户按下UILabel
时单元格不活动@
@jigneshVadadoriya 因为我想要获取行,但不是在按下单元格之后,并且用户按下了UILabel
【参考方案1】:
1)您可以使用UIView
的标签属性。只需在cellForRowAtIndexPath
方法中为labelChangeSomething
添加标签
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "firstCell", for: indexPath) as! CellOfFirstTableView
let list = sortOfSomething(id: id_something)[indexPath.row]
//tapRecognizer
let tap = UITapGestureRecognizer(target: self, action: #selector(FirstTableViewController.tapFunction))
cell.labelChangeSomething.isUserInteractionEnabled = true
cell.labelChangeSomething.addGestureRecognizer(tap)
//here added tag
cell.labelChangeSomething.tag = indexPath.row
return cell
2) 更新您的选择器方法,如下所示
func tapFunction(sender:UITapGestureRecognizer)
if let label = sender.view as? UILabel
//print label tag here == indexpath.row
print("row = \(label.tag)")
【讨论】:
【参考方案2】:当您点击单元格中的标签时,您不需要UITapGestureRecognizer
,您正在单击该单元格,您需要调用
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
TableViewDelegate
并在其中写下这段代码。
let cell = tableView.cellForRow(at: IndexPath) as? CellOfFirstTableView
【讨论】:
我的 UILabel 处于活动状态(将来)并且 UILabel 将重新加载单元格,所以我需要UITapGestureRecognizer
您没有一个好的方法,而不是让您的UILabel
可点击在单元格中的UILabel
顶部插入一个UIButton
。因此,当用户点击单元格的标签区域时,将调用按钮的操作。以上是关于获取 TableView 中单元格的行触摸 UILabel的主要内容,如果未能解决你的问题,请参考以下文章
单元格获取其前一个单元格的索引 - Tableview 内的 Collectionview
为 UITableView 插入带有动画的行(并更新所有其他单元格)