如何检测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 } }
要检测UITableViewCell
的UIButton
,您可以遵循以下任何一种方法:
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)