Добавить цель для кнопки в ячейках табличного представления
У меня есть табличное представление, что в его ячейках есть кнопка, и эти кнопки должны открывать представление с уникальным идентификатором. Поэтому мне нужно передать аргумент моим кнопкам, но с addTarget
Свойство я просто могу вызвать функцию без каких-либо параметров.
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
cell.editButton.addTarget(self, action: #selector(goToEdit(id:)), for: .touchUpInside)
}
func goToEdit(id: String) {
let edit = EditAdViewController(editingAdId: id)
self.navigationController?.pushViewController(edit, animated: true)
}
Есть ли способ отнести действие с некоторыми параметрами к кнопке? Спасибо всем:)
2 ответа
Может быть, вы можете попробовать связать свою кнопку с @IBAction и использовать params[indexPath.row].
Чтобы получить indexPath:
var cell = sender.superview() as? UITableViewCell
var indexPath: IndexPath? = yourTableView.indexPath(for: cell!)
Вы можете попробовать добавить функции делегата в ваш пользовательский UITableViewCell.
Например, у меня есть кнопка внутри этой таблицы tableViewCell:
PickupTableViewCell.swift
import UIKit
protocol PickupTableViewCellDelegate: NSObjectProtocol {
func pickupTableViewCell(userDidTapPickup pickup: Pickup, pickupTableViewCell: PickupTableViewCell)
}
class PickupTableViewCell: UITableViewCell {
// MARK: - Properties
@IBOutlet private weak var label_UserFullName: UILabel!
....
// MARK: - Functions
// MARK: IBAction
@IBAction func pickup(_ sender: Any) {
self.delegate?.pickupTableViewCell(userDidTapPickup: self.pickup, pickupTableViewCell: self)
}
}
Затем в соответствии с моим контроллером через UITableViewDataSource (cellForRow)
и, конечно, реализовать функцию делегата моего tableViewCell.
HomeViewController.swift
// MARK: - UITableViewDataSource
extension HomeViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let pickupTVC = tableView.dequeueReusableCell(withIdentifier: R.reuseIdentifier.pickupTableViewCell)!
pickupTVC.delegate = self
pickupTVC.pickup = self.pickups[indexPath.section]
return pickupTVC
}
}
// MARK: - PickupTableViewCellDelegate
extension HomeViewController: PickupTableViewCellDelegate {
func pickupTableViewCell(userDidTapPickup pickup: Pickup, pickupTableViewCell: PickupTableViewCell) {
// Do something
}
}