如何检测tableview单元格中的一个按钮

如何检测UITableviewCell一个按钮,我在UITableViewCell有10个UIButton ,接下来当我点击UIButton然后它检测到多个按钮时(就像奇数列表一样)。 我的UITableView启用了分页function。 这是我的所有代码。

的TableView

 class HomeViewController: UIViewController, UITableViewDelegate,UITableViewDataSource { @IBOutlet weak var homeTableView: UITableView! let mainArray = [["1","2","3","4"],["5","6","7","8"],["9","10","11","12"],["13","14","15","16"]] override func viewDidLoad() { super.viewDidLoad() self.homeTableView.delegate = self self.homeTableView.dataSource = self } func numberOfSections(in tableView: UITableView) -> Int { return mainArray.count } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return mainArray[section].count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell", for: indexPath) as! HomeTableViewCell return cell } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return self.view.frame.size.height } } 

TableViewCell

 class HomeTableViewCell: UITableViewCell { @IBOutlet weak var bookMarkBtn: UIButton! @IBAction func bookMarkBtnAction(_ sender: UIButton) { sender.isSelected = !sender.isSelected if(sender.isSelected == true) { sender.setImage(UIImage(named:"favorite_blue"), for: UIControlState.normal) } else { sender.setImage(UIImage(named:"favorite_white"), for: UIControlState.normal) } } } 

在您的cellForRowAt方法中,请为按钮添加标记号

 cell.bookMarkBtn.tag = indexPath.row; 

然后

 @IBAction func bookMarkBtnAction(_ sender: UIButton) { sender.isSelected = !sender.isSelected if(sender.tag == 0) { ... } else if (sender.tag == 1) { ... } } 

创建协议

  protocol HomeTableViewCellDelegate { func bookMarkBtnTapped(btn: UIButton) } class HomeTableViewCell: UITableViewCell { @IBOutlet weak var bookMarkBtn: UIButton! //add delegate var for protocol var delegate: HomeTableViewCellDelegate? @IBAction func bookMarkBtnAction(_ sender: UIButton) { sender.isSelected = !sender.isSelected if(sender.isSelected == true) { sender.setImage(UIImage(named:"favorite_blue"), for: UIControlState.normal) } else { sender.setImage(UIImage(named:"favorite_white"), for: UIControlState.normal) } //set this which button is pressed self.delegate?.bookMarkBtnTapped(btn: sender) } } 

HomeViewController实现了HomeTableViewCellDelegate方法

 class HomeViewController: HomeTableViewCellDelegate { func bookMarkBtnTapped(btn: UIButton) { // here btn is book mark button tapped by user from tableview cell } } 

要检测UITableViewCellUIButton ,您可以遵循以下任何一种方法:

1.使用UIButton IBOutlets

您可以在UITableViewCell创建与每个UIButton对应的IBOutlet ,并使用这些出口来识别执行的按钮操作。

例:

 class CustomCell: UITableViewCell { @IBOutlet weak var button1: UIButton! @IBOutlet weak var button2: UIButton! @IBOutlet weak var button3: UIButton! @IBOutlet weak var button4: UIButton! @IBOutlet weak var button5: UIButton! @IBAction func onTapButton(_ sender: UIButton) { if sender === button1 { //button1 specific code here } else if sender === button2 { //button2 specific code here } //and so on.. } } 

2.使用UIButton Tag属性

您可以为UITableViewCell中的每个UIButton提供tag值,然后使用该标记来标识特定按钮。

例:

 class CustomCell: UITableViewCell { @IBAction func onTapButton(_ sender: UIButton) { if sender.tag == 1 { //button1 has a tag = 1 //button1 specific code here } else if sender.tag == 2 { //button2 has a tag = 2 //button2 specific code here } //and so on.. } } 

编辑:

要在UIButton的选定/未选定状态下设置不同的图像,您可以使用故事板:

对于未选择状态:

在此处输入图像描述

对于选定状态:

在此处输入图像描述

如果您仍然遇到任何问题,请告诉我。

使用按钮标签。

在tableViewController中

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell", for: indexPath) as! HomeTableViewCell cell.bookMarkBtn.tag = indexPath.row cell.bookMarkBtn.addTarget(self, action: #selector(self. bookMarkBtnAction), for: .touchUpInside) return cell } @objc func bookMarkBtnAction(sender: UIButton) { if sender.tag == 0 { //or which indexpath do you want. //code } else if sender.tag == 1 { //code } .. } 

从tableviewcell类中删除@IBAction func bookMarkBtnAction(_ sender: UIButton)

Interesting Posts