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

时间:2018-02-25 04:23:37

标签: ios swift uitableview uibutton

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

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

4 个答案:

答案 0 :(得分:0)

cellForRowAt方法中,请为按钮添加标签号

cell.bookMarkBtn.tag = indexPath.row;

然后

@IBAction func bookMarkBtnAction(_ sender: UIButton) {

    sender.isSelected = !sender.isSelected

    if(sender.tag == 0)
    {
        ...
    } else if (sender.tag == 1)
    {
        ...
    }
}

答案 1 :(得分:0)

创建协议

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

答案 2 :(得分:0)

要检测UIButton中的UITableViewCell,您可以按照以下任何一种做法:

<强> 1。使用UIButton IBOutlets

您可以在IBOutlet中创建与UIButton相对应的UITableViewCell,然后使用这些商店来确定要执行的按钮操作。

示例:

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属性

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

示例:

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的选定/未选定状态下设置不同的图像,您可以使用故事板:

对于未选中状态:

enter image description here

对于选定状态:

enter image description here

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

答案 3 :(得分:-1)

使用按钮标签。

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