在uitableview swift 3中跟踪多个uibutton状态

时间:2016-12-20 11:26:56

标签: swift uitableview uibutton swift3

我正在制作一个应用程序,在一个合适的视图中每行都有一个按钮,该代码如下所示。

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return Int(numberOfButtonsNeeded!)!
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


    let cellIdentifier = "lightCell"
    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MyTableViewCell


    cell.lightButton.addTarget(self, action: #selector(buttonPressed), for: .touchDown)
    cell.lightButton?.tag = tags[indexPath.row]

    return cell
}

基本上我想要的只是一个执行2个功能的按钮,我想现在跟踪按钮以及是否按下了按钮。

如果按下按钮,我希望它显示一个名为“on.jpg”的特定图像并执行某个动作。 如果没有按下按钮,我希望它显示“off.jpg”并执行不同的操作。

按钮应处于两种状态中的任何一种状态(按下或未按下),并且应该没有中间状态。

按下按钮的方法如下:

func buttonPressed(_ sender : UIButton){

     if ("certain condition is met"){
            guard let image = UIImage(named: "on.jpg") else {
                print("Image Not Found")
                return
            }
            sender.setImage(image, for: UIControlState.normal)
        }

     else if ("another condition is met"){
            guard let image = UIImage(named: "off.jpg") else {
                print("Image Not Found")
                return
            }
            sender.setImage(image, for: UIControlState.normal)
        }
    }

我尝试过使用分配给每个按钮的标签和变量来尝试这样做,但它变得过于复杂,必须有一种更简单的方法来跟踪。

最后,我将如何刷新tableview并确保所有状态始终同步

1 个答案:

答案 0 :(得分:1)

您必须在表dataSource中添加一个布尔变量,并设置其默认值true,该值为false。按下按钮时,您可以像这样执行代码

func buttonPressed(_ sender : UIButton){

     let isPressed = dataSource[sender.tag].isButtonPressed
    if isPressed {
       /// Button Already Pressed
    } else {
      /// Button is not pressed
    }
    dataSource[sender.tag].isButtonPressed = !isPressed
}

此外,您的表格代表保持不变。