Swift:使用tableView DidSelect方法更改单元格的UIButton图像

时间:2019-01-22 05:20:13

标签: swift xcode uitableview uibutton

我在Tableview中有TableView,带有两个标签和一个UIButton。因此,在DidSelect方法中,我想更改该特定单元格的UIButton图像。作为附件图像。

enter image description here

3 个答案:

答案 0 :(得分:1)

检查此

enter image description here

import UIKit

class ButtonTblViewController: UIViewController,UITableViewDelegate, UITableViewDataSource {

    var arry = ["Montitanki Chowk","Greenland Chokdi"]
    var SelectData = [NSMutableDictionary]()

    @IBOutlet weak var tbleVw: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        for i in 0..<arry.count
        {
            self.SelectData.append(["data":arry[i],"isSelect":"NO"])
        }

        self.tbleVw.reloadData()
        // Do any additional setup after loading the view.
    }

    // MARK - tableView Delegates

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return SelectData.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell:listTble = tableView.dequeueReusableCell(withIdentifier: "CellID", for: indexPath as IndexPath) as! listTble
        cell.lblTit.text =  self.SelectData[indexPath.row].value(forKey: "data") as? String

        cell.btnRdo.tag = indexPath.row
        let tapgesture = UITapGestureRecognizer(target: self , action: #selector(self.sectionTapped(_:)))
        cell.btnRdo.addGestureRecognizer(tapgesture)

        let selData = self.SelectData[indexPath.row].value(forKey: "isSelect") as! NSString

        if selData == "NO" {
            cell.btnRdo.setImage( UIImage(named: "btnUnSel"), for: .normal)
        } else {
            cell.btnRdo.setImage( UIImage(named: "btnSel"), for: .normal)
        }

        return cell
    }

    @objc func sectionTapped(_ sender: UITapGestureRecognizer){
        if(self.SelectData[(sender.view?.tag)!].value(forKey: "isSelect") as! String == "NO"){
            self.SelectData[(sender.view?.tag)!].setValue("YES", forKey: "isSelect")
        }else{
            self.SelectData[(sender.view?.tag)!].setValue("NO", forKey: "isSelect")
        }
        self.tbleVw.reloadData()
    }

    /*
     // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

}

class listTble: UITableViewCell {
    @IBOutlet weak var lblTit: UILabel!
    @IBOutlet weak var btnRdo: UIButton!
}

放出

enter image description here

答案 1 :(得分:0)

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        guard let btn = (tableView.cellForItem(at: indexPath) as! yourCellName).button else {
            return
        }
        btn.setImage(UIImage(named: "yourSelectedImage name"), for: .normal)
    }
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        guard let btn = (tableView.cellForItem(at: indexPath) as! yourCellName).button else {
            return
        }
        btn.setImage(UIImage(named: "yourNotSelectedImagename"), for: .normal)
    }

答案 2 :(得分:0)

您首先需要使用cellForRow方法设置按钮标签

didSelectRowAtIndexPath方法之后,您需要设置按钮的图像,而在didDeselectRowAtIndexPath中设置按钮中的未选择图像。

您可以使用来设置按钮图像:

playButton.setImage(UIImage(named: "play.png"), forState:UIControlState.Normal)