tableview单元格中的单选按钮很快

时间:2018-04-12 13:30:00

标签: ios swift uitableview cocoa-touch

目前我正在尝试创建一个类似于商店的视图,显示多个不同的列表(太空飞船),您一次只能选择一个。这将是一个游戏,您可以选择不同的太空飞船。我正在使用UITableViewCell Xib文件唱UITableView。我只有一个表格单元格Xib文件来格式化所有不同的列表。选择按钮的样式应该像单选按钮一样。

我遇到的困难是,当我点击一个按钮时,它会使所有按钮显示为“已选择”。

这是我的代码:

TableViewController:

import UIKit

struct CellData {
    var image: UIImage?
    var message: String?
    var id: Int?

}

var array = [String]()
var buttonArray = [ShopButton]()


class ViewController: UITableViewController {

    var data = [CellData]()

    override func viewDidLoad() {
        super.viewDidLoad()
        data = [CellData.init(image: #imageLiteral(resourceName: "ship_0"), message: "Red Ship", id: 0), CellData.init(image: #imageLiteral(resourceName: "ship_1"), message: "Blue Ship", id: 1), CellData.init(image: #imageLiteral(resourceName: "ship_3"), message: "Yellow Ship", id: 2)]
        array = ["Select", "Select", "Select"]

            }

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



    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = Bundle.main.loadNibNamed("TableViewCell", owner: self, options: nil)?.first as! TableViewCell
        cell.mainImageView.image = data[indexPath.row].image
        cell.mainLabel.text = data[indexPath.row].message
        cell.buttonOutlet.setTitle(array[indexPath.row], for: .normal)
        cell.buttonOutlet.tag = data[indexPath.row].id!
        buttonArray.append(cell.buttonOutlet)
        return cell
    }

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 150
    }



}

TableViewCell

import UIKit

class TableViewCell: UITableViewCell {



    @IBOutlet weak var mainImageView: UIImageView!
    @IBOutlet weak var mainLabel: UILabel!
    @IBOutlet weak var buttonOutlet: ShopButton!



    @IBAction func button(_ sender: ShopButton) {
        buttonOutlet.makeSelected()
    }



    override func awakeFromNib() {
        super.awakeFromNib()


    }

我的UIButton的子类:

import UIKit

class ShopButton: UIButton {

    var buttonID = Int()

    func makeSelected() {

            switch self.buttonID {
            case 0:
                array = ["Selected", "Select", "Select"]
                buttonTitle()
                print("Ship: Red Ship")
            case 1:
                array = ["Select", "Selected", "Select"]
                buttonTitle()
                print("Ship: Blue Ship")
            case 2:
                array = ["Select", "Select", "Selected"]
                buttonTitle()
                print("Ship: Yellow Ship")
            default:
                print("Error: Default Initiated")
            }

    }
    func buttonTitle() {

        for button:ShopButton in buttonArray {
            button.setTitle(array[button.buttonID], for: .normal)
        }

    }

    override func awakeFromNib() {

    }

}

我意识到这可能不是制作这个店铺设置的最佳方法,所以如果有人能够解决如何解决这个问题或者采用比我目前做得更好的不同方式,那将非常感激。感谢。

1 个答案:

答案 0 :(得分:-1)

您可以在表格视图中的didSelectRowAt中使用此逻辑,如:

您可以使按钮的标记等同于indexpath.row

tableview
        for (button in buttons)    {
             button.isSelected = false;   
        }

        if button.tag == indexpath.row{ //Here sender.tag would be your indexPath.row
            button.isSelected = true;
            button.setImage(#imageLiteral(resourceName: "ic_Radio_filled"), for: .normal)
        }else{
            button.isSelected = false;
            button.setImage(#imageLiteral(resourceName: "ic_Radio_Empty"), for: .normal)
        }   

让我知道它是否适合您。