Получить строку коснулся UILabel для ячейки в TableView

Коллеги, у меня проблема с получением строки, когда я нажал на UILabel в камере в UITableView, Так что я

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 Я вижу "Привет мир", но я хочу увидеть строку в том, что UILabel расположен. Я могу получить строку нажатой ячейки, но пользователь может нажать только UILabel и не нажимайте части клетки, где UILabel не активен. Спасибо за ваши идеи!

2 ответа

Решение

1) Вы можете использовать свойство тега UIView, Просто добавьте тег к labelChangeSomething в cellForRowAtIndexPath метод

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)")
  }

}

Вам не нужно UITapGestureRecognizer когда вы нажимаете на ярлык в ячейке, вы нажимаете на ячейку, вам нужно позвонить

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

TableViewDelegate и написать этот код в нем.

let cell = tableView.cellForRow(at: IndexPath) as? CellOfFirstTableView
Другие вопросы по тегам