如何在swift 4和xcode 9中的UITableViewCell上单击按钮更新UILabel?

时间:2018-06-15 04:41:24

标签: ios swift xcode uitableview

我正在建立一个食品订购应用程序。其中,有增量和减量按钮和UILabel来显示数量。我想更新增量和减量按钮上的数量标签点击。图像附有。

enter image description here

My ViewController的片段是

protocol GondolaTableViewCellDelegate: class {
    func tableViewCellAddToCart(_ sender: ItemDetailTableViewCell)
    func tableViewCellIncrement(_ sender: ItemDetailTableViewCell)
    func tableViewCellDecrement(_ sender: ItemDetailTableViewCell)
    var tableViewCellQuantity: String { get set }
}

class ItemDetailTableViewCell: UITableViewCell {
    //itemTableCell

    var quantity = 1

    @IBOutlet weak var itemNameLabelCell: UILabel!
    @IBOutlet weak var itemDescLabelCell: UILabel!
    @IBOutlet weak var itemPriceLabelCell: UILabel!
    @IBOutlet weak var itemQuantityLabelCell: UILabel!
    @IBOutlet weak var itemDecrementButton: UIButton!
    @IBOutlet weak var itemIncrementButton: UIButton!
    @IBOutlet weak var addToCartButton: UIButton!

    weak var delegate: GondolaTableViewCellDelegate?

    @IBAction func addToCartCellButton(_ sender: Any) {
        delegate?.tableViewCellAddToCart(self)

        //print("Neck, Angel Memory")
    }
    @IBAction func itemIncrementButtonCell(_ sender: Any) {
        delegate?.tableViewCellIncrement(self)

        //quantity  = quantity+1
        //itemQuantityLabelCell.text = "\(quantity)"
    }
    @IBAction func itemDecrementButtonCell(_ sender: Any) {
        delegate?.tableViewCellDecrement(self)

//        if quantity == 1 {
//            //toastNeck(message: "Min. quantity should be 1")
//        }else if quantity >= 2 {
//            //quantity  = quantity-1
//        }
        //itemQuantityLabelCell.text = "\(quantity)"
    }

}

class AllItemViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, GondolaTableViewCellDelegate {
    var tableViewCellQuantity: String = ""



    @IBOutlet weak var allItemImageHeader: UIImageView!
    @IBOutlet weak var allItemTableView: UITableView!
    @IBOutlet weak var allItemLabel: UILabel!
    @IBOutlet weak var visualEffect: UIVisualEffectView!
    @IBOutlet weak var itemsTableView: UITableView!
    @IBOutlet weak var itemDetailLabel: UILabel!
    @IBOutlet weak var cartItemLabel: UILabel!

    var storeItem = [StoreItem]()
    var allItem = [ItemDetaill]()
    var quantityArray: [Int] = []

    var selectedIndex: Int!

    var storeId: String = ""
    var storeCatId: String = ""
    var storeName: String = ""
    var quantity = 1

    override func viewDidLoad() {
        super.viewDidLoad()

        for i in 0 ..< 100 {
            quantityArray.append(2)
        }

        allItemTableView.delegate = self
        allItemTableView.dataSource = self
        itemsTableView.delegate = self
        itemsTableView.dataSource = self


    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return tableView === allItemTableView ? storeItem.count : allItem.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return 1 //storeItem.count
    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 5
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let header = UIView()
        header.backgroundColor = UIColor.white
        return header
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return tableView === allItemTableView ? 56 : 100
    }

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

        if tableView == allItemTableView {
            let storeCell = allItemTableView.dequeueReusableCell(withIdentifier: "allItemCell", for: indexPath) as! AllItemTableViewCell

            return storeCell
        }else {
            let itemCell = itemsTableView.dequeueReusableCell(withIdentifier: "itemTableCell", for: indexPath) as! ItemDetailTableViewCell
            itemCell.itemNameLabelCell.text = allItem[indexPath.section].item_name
            itemCell.itemDescLabelCell.text = allItem[indexPath.section].item_desc
            itemCell.itemPriceLabelCell.text = "₹" + allItem[indexPath.section].item_net_price
            itemCell.delegate = self
            itemCell.addToCartButton.tag = indexPath.section
            itemCell.addToCartButton.addTarget(self, action: #selector(addToCarts(_:)), for: .touchUpInside)
            itemCell.itemIncrementButton.tag = indexPath.section
            itemCell.itemIncrementButton.addTarget(self, action: #selector(increment(_:)), for: .touchUpInside)
            itemCell.itemDecrementButton.tag = indexPath.section
            itemCell.itemDecrementButton.addTarget(self, action: #selector(decrement(_:)), for: .touchUpInside)

            return itemCell
        }

    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedIndex = indexPath.section
        if tableView == allItemTableView {

        }else {
            let itemCell = itemsTableView.cellForRow(at: indexPath)

            print("Will Work")
        }

    }

    @objc func increment(_ sender: UIButton) {
        quantity = quantity + 1
        tableViewCellQuantity = "\(quantity)"
        //let newQuantity = quantityArray[sender.tag] + 1
        //self.quantityArray.replaceSubrange(sender.tag, with: newQuantity)
        itemsTableView.reloadData()
    }

    @objc func decrement(_ sender: UIButton) {
        if quantity == 1 {
            toastNeck(message: "Min. quantity should be 1")
        }else if quantity >= 2 {
            quantity  = quantity - 1
        }
        tableViewCellQuantity = "\(quantity)"
        itemsTableView.reloadData()
    }

    @objc func addToCarts(_ sender: UIButton) {
        if sender.tag == 0 {
            print(storeItem[sender.tag].item_name)
        }
    }


    func tableViewCellAddToCart(_ sender: ItemDetailTableViewCell) {
        guard let tappedIndexPath = itemsTableView.indexPath(for: sender) else {
            return
        }

        print(allItem[tappedIndexPath.section].item_name)
    }

    func tableViewCellIncrement(_ sender: ItemDetailTableViewCell) {
        guard let tappedIndexPath = itemsTableView.indexPath(for: sender) else {
            return
        }

        print(allItem[tappedIndexPath.section].created_date)
        quantity = quantity + 1
        tableViewCellQuantity = "\(quantity)"
        //let newQuantity = quantityArray[tappedIndexPath.section] + 1
        //self.quantityArray.replaceSubrange(tappedIndexPath.count, with: <#T##Collection#>)

    }

    func tableViewCellDecrement(_ sender: ItemDetailTableViewCell) {
        guard let tappedIndexPath = itemsTableView.indexPath(for: sender) else {
            return
        }
        if quantity == 1 {
            toastNeck(message: "Min. quantity should be 1")
        }else if quantity >= 2 {
            quantity  = quantity - 1
        }
        tableViewCellQuantity = "\(quantity)"
        itemsTableView.reloadData()

        print(allItem[tappedIndexPath.section].id)
    }

    func tableViewCellQuantity(_ sender: ItemDetailTableViewCell) {

    }
}

但是,我能够通过协议检测按钮点击,但无法更新UILabel。

此外,我需要将添加的项目存储到数据模型类中,并且必须是不同项目的不同值,这意味着每个项目应存储不同的数量。

有一个类似的问题here,但它不起作用。

如果有人需要更多详情,请告诉我。

1 个答案:

答案 0 :(得分:0)

试试这个:

@objc func increment(_ sender: UIButton) {
       if let cell = sender.superview?.superview as? YourCellClass {
           let indexPath = tbl_songsInfo.indexPath(for: cell)
           //Do whatever you want

        quantity = quantity + 1
        tableViewCellQuantity = "\(quantity)"
        //let newQuantity = quantityArray[sender.tag] + 1
        //self.quantityArray.replaceSubrange(sender.tag, with: newQuantity)
        itemsTableView.reloadData()

        }

    }

查看此link