【问题标题】:Get row touched UILabel for cell in TableView获取 TableView 中单元格的行触摸 UILabel
【发布时间】: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

标签: ios swift uitableview swift3 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。因此,当用户点击单元格的标签区域时,将调用按钮的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2020-10-20
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    相关资源
    最近更新 更多