Swift - нажатая кнопка внутри ячейки табличного представления не вызывает строку выбора в функции этой ячейки - PullRequest
0 голосов
/ 10 декабря 2018

Я создаю табличное представление программно, и каждая ячейка табличного представления имеет кнопки, связанные с ними.

Если я щелкаю строку, я могу обработать тег, связанный с кнопками в этой строке, а затем могу редактировать заголовок, когдаприменение некоторых других функций.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    TmpActionConnectorTag = indexPath.row + 700 //Tag associated to button
}

Когда кнопка нажата, у меня есть этот код, который меняет другую кнопку в этой строке

let tag = TmpActionConnectorTag
    let tmpButton = self.view.viewWithTag(tag) as? UIButton

Проблема заключается в том, если я непосредственно нажимаю на кнопкукнопка в ячейке таблицы, строка выбора не получает вызов и значение тега не указывается.Чтобы сделать это, я должен сначала щелкнуть внутри ячейки, а затем кнопку, чтобы узнать тег, связанный со строкой.

Есть ли способ тренировки строки индекса при нажатии кнопки, чтобы я не нажималне нужно щелкнуть по фактической ячейке?

enter image description here

выше - это то, как ячейка выглядит нормально, а ниже показано, как ячейка должна быть выбрана, чтобы иметь возможностьчтобы получить значение индекса.

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Кнопка ячейки не будет вызывать func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath), вместо этого вам нужно добавить target к вашей кнопке, что обычно делается в cellForItemAt.

Добавить цель к кнопке в ячейке

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = MyTableViewCell()
        cell.button.tag = indexPath.row
        cell.button.addTarget(self, action: #selector(didTapCellButton(sender:)), for: .touchUpInside)
    }

Действие кнопки «Ручка»

@objc func didTapCellButton(sender: UIButton) {
    guard viewModels.indices.contains(sender.tag) else { return } // check element exist in tableview datasource

    //Configure selected button or update model
}
0 голосов
/ 10 декабря 2018

Действие кнопки не вызовет didSelectRowAt.Вы должны пойти на делегат метод.Если вы не знаете о делегате, значит см.

...