如何在Swift 4和XCode 9中的UITableViewCell中单击按钮时更新UILabel? [英] How to update UILabel on a button click in UITableViewCell in swift 4 and xcode 9?

查看:52
本文介绍了如何在Swift 4和XCode 9中的UITableViewCell中单击按钮时更新UILabel?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建食品订购应用程序.其中,有递增和递减按钮以及一个用于显示数量的UILabel.我要在增加和减少按钮单击时更新数量标签.附上图片.

I am building a food ordering app. In which, there are increment and decrement buttons and a UILabel to display quantity. I want to update the quantity label on increment and decrement buttons click. Image of which is attached.

我的ViewController"的一个片段是

A snippet of My ViewController is

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.

However I am able to detect the button clicks through protocols, but unable to update the UILabel.

我还需要将添加的项存储到数据模型类中,并且必须将不同项的值设置为不同的值,这意味着每个项应存储不同的数量.

Also I need to store the added items into data model class and have to be different values of different items, means each item should store diffrent quantities.

此处,但无法正常工作.

如果有人需要更多详细信息,请告诉我.

Please let me know if anyone need any more details.

推荐答案

尝试一下:

@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()

        }

    }

查看此链接

这篇关于如何在Swift 4和XCode 9中的UITableViewCell中单击按钮时更新UILabel?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆