单击按钮时增加和减少值

Posted

技术标签:

【中文标题】单击按钮时增加和减少值【英文标题】:Increase and Decrease values on Button click 【发布时间】:2018-07-18 07:50:59 【问题描述】:

我想在 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


【问题讨论】:

你能在单元格中显示按钮层次结构吗 只有你的单元格中的按钮增加了吗? 【参考方案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

【讨论】:

好代码,但是有一个小问题假设我增加任何单元格值但是当我增加其他单元格值时,计数不是从 0 开始,而是从增加值开始。 是的,在这种情况下,您必须管理每个单元格的值,这里是针对控制器的。 @akbarkhan【参考方案2】:

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

在子类ShoppingCell 中创建回调,IBActions 用于 in- 和 reduction 。将动作连接到按钮

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 表示的模型,该模型是包含属性counter 的自定义结构或类。

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

    let item = dataSource[indexPath.row]
    cell.counter = item.counter
    cell.callback = ( newValue in
        item.counter = newValue
    

    return cell

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

请按以下步骤操作:

第 1 步:

创建对象类

class QuantityBO : NSObject
var quantity      : Int?

第 2 步: 在您的班级中创建全局数组

var arrQuantityList = [QuantityBO]()

第三步:

根据您的单元格数量分配值 它可能会根据您的 api 反应而改变

第四步:

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

它可能对你有帮助。谢谢。

【讨论】:

以上是关于单击按钮时增加和减少值的主要内容,如果未能解决你的问题,请参考以下文章

当单击其他组件的按钮时,我想增加和减少数字

按下按钮时连续增加整数值

如何增加/减少点击 Js/ReactJs 中相同按钮的计数

使用php单击按钮时从数据库中减少值

MySQL中的行值增加和减少1

Android - 无法从列表项中增加或减少值