Получить строку коснулся 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