Come rilevare un pulsante nella cella tableview

Come rilevare un pulsante in UITableviewCell , ho 10 UIButton in UITableViewCell , poi quando clicco su UIButton poi rileva più pulsanti, (come l’elenco di numeri dispari). il mio UITableView è abilitato al paging. Ecco il mio codice tutto.

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) } } } 

Nel tuo metodo cellForRowAt , aggiungi il numero di tag ai pulsanti

 cell.bookMarkBtn.tag = indexPath.row; 

Poi

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

Creare un protocollo

  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 implementa il metodo HomeTableViewCellDelegate

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

Per rilevare un UIButton in un UITableViewCell , è ansible seguire uno dei seguenti approcci:

1. Utilizzare UIButton IBOutlets

È ansible creare un IBOutlet corrispondente a ciascun UIButton in UITableViewCell e utilizzare tali punti vendita per identificare quale azione del pulsante viene eseguita.

Esempio:

 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. Usa la proprietà Tag UIButton

È ansible fornire un valore di tag a ciascun UIButton presente in UITableViewCell e quindi utilizzare tale tag per identificare il pulsante specifico.

Esempio:

 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.. } } 

Modificare:

Per impostare immagini diverse nello stato selezionato / deselezionato di UIButton, puoi utilizzare lo storyboard per questo:

Per stato non selezionato:

inserisci la descrizione dell'immagine qui

Per lo stato selezionato:

inserisci la descrizione dell'immagine qui

Fammi sapere se hai ancora problemi.

Usa il tag del pulsante per questo.

In 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 } .. } 

remove @IBAction func bookMarkBtnAction(_ sender: UIButton) dalla class tableviewcell