我有一个表视图,其单元格本身有一个按钮,这些按钮应该打开一个具有唯一ID的视图。所以我需要将一个参数传递给我的按钮但是使用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)
}
有没有办法将带有某些参数的动作引用到按钮?谢谢大家:)
答案 0 :(得分:0)
也许您可以尝试将按钮链接到@IBAction并使用params [indexPath.row]。
获取indexPath:
var cell = sender.superview() as? UITableViewCell
var indexPath: IndexPath? = yourTableView.indexPath(for: cell!)
答案 1 :(得分:0)
您可以尝试将代理功能添加到自定义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
}
}