2016-12-13 2 views
0

Коллеги, у меня есть проблема с получением строки, когда я нажал на UILabel в ячейке в UITableView. Итак, у меня естьПолучить строку касание UILabel для ячейки в TableView

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 не активен. Спасибо за ваши идеи!

+0

Вы можете просто проверить выбор ячейки? –

+0

Почему вы не используете метод didSelectRow? –

+0

@ArtemNovichkov нет, потому что ячейка не активна при нажатии пользователем в '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)") 
    } 

} 
+0

да! он работает, как я хочу, спасибо! –

+1

Удовольствие, помогающее вам .... –

0

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

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

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

let cell = tableView.cellForRow(at: IndexPath) as? CellOfFirstTableView 
+0

мой UILabel активен (в будущем), и UILabel перезагрузит ячейку, поэтому мне нужно в 'UITapGestureRecognizer' –

+0

У вас нет хорошего подхода, вместо того чтобы сделать' 'UILabel' tappable insert' 'UIButton' поверх вашей' UILabel' в ячейке. поэтому, когда пользователь нажимает на область метки ячейки, вызывается действие кнопки. –

Смежные вопросы