单击按钮增加和减少值

时间:2018-07-18 07:51:00

标签: ios swift uitableview uibutton

我想在UIlabel上显示值。当我按下UIbutton来增加或减少标签上的值时。这是我的代码,当我运行我的项目时,但我的uilabel没有任何价值。

@IBAction func btnIncreaseAction(_ sender: Any) {


    var count = 0
    count = (count + 1)

   if let cell = (sender as? UIButton)?.superview?.superview?.superview as? ShoppingCell
    {
        //cell.lblForOnty.text = "\(cell.lblForOnty.text ?? 0 + 1)"
        cell.lblForOnty.text = String(count)
    }



}



  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellRID") as! ShoppingCell

    var someValue: Int = 0 {
        didSet {
            cell.lblForOnty.text = "\(count)"
        }
    }

    return cell
}
}

4 个答案:

答案 0 :(得分:1)

将变量移动到函数外部 增加/减少函数内的计数并重新加载表,或者也可以重新加载特定的索引。 PFB代码被剪掉

let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation:   UITableViewRowAnimation.Top)

答案 1 :(得分:1)

这是应该放在您的ViewController中的代码。我假设numberOfSections为1,并且在numberOfRowsInSection中传递的是所需的行数。否则,您需要修改以下行:let indexPath = IndexPath(row: sender.tag, section: 0)

var count = 0 // Count variable should be a global variable, you need it to decrease the value too.
@objc func increaseCounter(sender: UIButton) {
    //increase logic here
    count = (count + 1)
    let indexPath = IndexPath(row: sender.tag, section: 0)
    let cell = tableView.cellForRow(at: indexPath)
    cell.lblForOnty.text = "\(count)"
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellRID") as! ShoppingCell

    // Add tag and action to your button
    cell.yourButton.tag = indexPath.row
    cell.yourButton.addTarget(self, action: #selector(increaseCounter(sender:)), for: .touchUpInside)

    return cell
}

答案 2 :(得分:0)

superview?.superview?.superview很奇怪。不要那样做回调更可靠。

在子类ShoppingCell中创建一个回调,并在IBAction中创建in和reduce。将动作连接到按钮

class ShoppingCell: UITableViewCell {

    @IBOutlet weak var lblForOnty: UILabel!

    var callback : ((Int)->())?

    var counter = 0 {
      didSet {
         lblForOnty.text = "\(count)"
      }
    }

    @IBAction func btnIncreaseAction(_ sender: UIButton) {
        counter += 1
        callback?(counter)
    }

    @IBAction func btnDecreaseAction(_ sender: UIButton) {
        if counter > 0 { counter -= 1 }
        callback?(counter)
    }

}

cellForRow中,将counter的值传递到单元格,并使用回调更新由dataSource表示的模型,该模型是包含属性{{的自定义结构或类1}}。

counter

没有超级视图和索引路径的麻烦。

答案 3 :(得分:0)

请按照以下步骤操作:

第1步:

创建对象类

class QuantityBO : NSObject{
var quantity      : Int?
}

步骤2: 在您的课程中创建全局数组

var arrQuantityList = [QuantityBO]()

第3步:

根据您的单元格数量分配值
可能会根据您的api共振而改变

第4步:

在cellForRowAt方法中,请输入:

cell.lblQuantity.text = String(arrQuantityList[indexPath.row].quantity)
cell.yourBtnName.tag = indexPath.row

第5步:

按按钮操作

arrQuantityList[sender.tag].quantity = arrQuantityList[sender.tag].quantity + 1
let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation:   UITableViewRowAnimation.none)

这可能对您有所帮助。谢谢