如何在tableview Swift中按下两个按钮来增加/减少标签值

时间:2018-01-17 11:06:58

标签: ios swift

我需要在ViewController中快速编写一个表视图,标签,AddButton。在tableview 8中有自定义单元,在每个单元格中有一个标签,( - ,+)按钮在那里。如果我按下' +'标签价值必须增加,而如果我按下' - '标签值减少,同样的方式发生在每个单元格上。最后,如果我按下AddButton,则必须添加总数,并在viewcontroller中显示标签谢谢,InAdvance。 image 在viewController tableview方法

   @IBOutlet var tableviewObj: UITableView!

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return 8
}
public func numberOfSections(in tableView: UITableView) -> Int // Default is 1 if not implemented
{
    return 1
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
           if indexPath.row  == 0 {
        let cell:firstTableViewCell = tableView.dequeueReusableCell(withIdentifier: "first") as! firstTableViewCell
        return cell
    }
    else if indexPath.row == 1 {
       let cell:secondTableViewCell = tableView.dequeueReusableCell(withIdentifier: "second") as! secondTableViewCell
                 return cell
    }
     else if indexPath.row == 2 {
       let cell:thirdTableViewCell = tableView.dequeueReusableCell(withIdentifier: "third") as! thirdTableViewCell
        return cell
    }
   else if indexPath.row == 3 {
        let cell:fourthTableViewCell = tableView.dequeueReusableCell(withIdentifier: "fourth") as! fourthTableViewCell
        return cell
    }
    else if indexPath.row == 4 {
        let cell:fifthTableViewCell = tableView.dequeueReusableCell(withIdentifier: "fifth") as! fifthTableViewCell
        return cell
    }
    else if indexPath.row == 5 {
        let cell:sixthTableViewCell = tableView.dequeueReusableCell(withIdentifier: "sixth") as! sixthTableViewCell
        return cell
    }
        else if indexPath.row == 6 {
       let cell:seventhTableViewCell = tableView.dequeueReusableCell(withIdentifier: "seven") as! seventhTableViewCell
        return cell
    }else  {
        let cell:eighthTableViewCell = tableView.dequeueReusableCell(withIdentifier: "eight") as! eighthTableViewCell
        return cell
    }
}
 @IBOutlet var labelObj: UILabel!
@IBAction func Total(_ sender: Any) {

   // i need code here


}
class firstTableViewCell: UITableViewCell {
@IBOutlet var labelObj: UILabel!
var cur = 0
var str = ""

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code

}

@IBAction func Minus(_ sender: Any) {
            if (self.labelObj.text == "1") {
        self.labelObj.text = String( 1)

    }else
            {
                cur = Int(labelObj.text!)!
                self.labelObj.text = String(cur - 1)
                str = self.labelObj.text!

                print(str)
    }
}
@IBAction func Add(_ sender: Any) {
    cur = Int(labelObj.text!)!
    self.labelObj.text = String(cur + 1)

    str = self.labelObj.text!

    print(str)


}

1 个答案:

答案 0 :(得分:0)

创建一个模型,将标签的值保存在类似下面的单元格中

struct Product {
    var price = 0
}

我们需要从cell到viewcontroller进行通信,所以我们需要一个类似下面的协议

protocol CartSelection {
    func addProductToCart(product : Product, atindex : Int)
}

我创建了要在tableview中显示的数组。我会将产品传递给细胞。所以ViewController代码是:

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,CartSelection {

    @IBOutlet weak var totalLabel: UILabel!

    var productArray = [Product]()

    @IBOutlet weak var testTableview: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        for _ in 0...10{
            productArray.append(Product(price: 1))
        }
        testTableview.allowsSelection = false
        calculateTotal()
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell : TestTableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TestTableViewCell
        cell.product = productArray[indexPath.row]
        cell.valueLabel.text = "\(cell.product.price)"
        cell.productIndex = indexPath.row
        cell.cartSelectionDelegate = self

        return cell
    }

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

    @IBAction func addBtnPressed(_ sender: UIButton) {

    }

    func addProductToCart(product: Product, atindex: Int) {
        productArray[atindex] = product

        calculateTotal()
    }

    func calculateTotal()
    {
        var totalValue = 0
        for objProduct in productArray {

            totalValue += objProduct.price
        }

        self.totalLabel.text = "Total \(totalValue)"

    }

}

TableViewCell代码如下:

class TestTableViewCell: UITableViewCell {
    var product : Product!
    private var counterValue = 1
    var productIndex = 0

    var cartSelectionDelegate: CartSelection?

    @IBOutlet weak var valueLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
    @IBAction func minusButton(_ sender: UIButton) {
        if(counterValue != 1){
            counterValue -= 1;
        }
        self.valueLabel.text = "\(counterValue)"
        product.price = counterValue
        cartSelectionDelegate?.addProductToCart(product: product, atindex: productIndex)
    }
    @IBAction func plusButton(_ sender: UIButton){
        counterValue += 1;
        self.valueLabel.text = "\(counterValue)"
        product.price = counterValue
        cartSelectionDelegate?.addProductToCart(product: product, atindex: productIndex)

    }
}

输出将如下面的屏幕截图

Initial Stage

After changing value in cell