获取 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

c_cpp 获取的tableView单元格的值

为 UITableView 插入带有动画的行(并更新所有其他单元格)

如何将单元格的值从 TableView 获取到另一个视图

Javafx:TableView根据行列获取特定表格单元格的图形节点

编辑 tableview Swift 的行高