2016-10-12 15 views
0

2つのユニークなカスタムUITableViewCellを持つUITableViewControllerがあります。ユニークなセルは、orderPriceLabelItemCell(行1+)と呼ばれるUILabelの注文全体の価格を含むHeaderCell(行0)です。itemPriceLabelはインデックスパスに各アイテムの価格を格納します。 countLabelは、各アイテムが注文に追加された回数を格納する。Swift:同じUITableViewControllerのユニークなUITableViewCell間でデータを渡す方法

ItemCellは、+ UIButtonおよび UIButtonを有する。 +ボタンがタップされるたびに、対応するインデックスパスにあるcountLabelが増加し、-ボタンがタップされると、countLabelが減少します。この部分は私がどのようにしたいのかに作用します。私は+ボタンをタップすると、行0でHeaderCellorderPriceLabelを更新しているに苦しんだ、orderPriceLabelItemCellitemPriceLabelに格納された値によって増やす必要があり、その逆は-ボタンをタップした時に起こるべき。

ItemCellコード:

class ItemCell: UITableViewCell { 

// MARK: Properties 
@IBOutlet weak var itemOrderCountLabel: UILabel! 
@IBOutlet weak var itemPriceLabel: UILabel! 

var count: Int = 0 

override func awakeFromNib() { 
    super.awakeFromNib() 

} 

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


} 

@IBAction func decrementButton(sender: AnyObject) { 
    count -= 1 
    itemOrderCountLabel.text = "\(count)" 
    //How to decrease orderPriceLabel 

} 

@IBAction func incrementButton(sender: AnyObject) { 
    count += 1 
    itemOrderCountLabel.text = "\(count)" 
    //How to increase orderPriceLabel 

} 

HeaderCellコード:

class FoodMenuTableViewCell: UITableViewCell { 

// MARK: Properties 
@IBOutlet weak var orderPriceLabel: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 

} 

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


} 

TableViewControllerコード:

class FoodMenuTableVC: UITableViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    return 1 
} 

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

    itemList.count + 1 

} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    if indexPath.row == 0 { 

     let cellIdentifier = "headerCell" 

     let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! HeaderCell 

     //cell.orderPriceLabel.text = ....? 

     return cell 

    } else { 

     //This works fine 

     let cellIdentifier = "itemCell" 

     let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! ItemCell 

     let name = localSelectedVendorName! 


      let keys = Array(itemList.keys) 
      let values = Array(itemList.values) 

      cell.itemPriceLabel.text = String(values[indexPath.row - 1].price) 
      cell.itemOrderCountLabel.text = " " 

     } 

     return cell 
    } 

私は迅速かつ一般的なプログラミングにはかなりのnoobです。

ありがとうございました!

答えて

0

合計金額をクラス変数(プロパティ)に保存することをおすすめします。あなたのTableViewControllerクラスでviewDidLoad上記のコード行を追加します。

var totalPrice = 0 

これは簡単にクラス全体を通じてアクセスできる変数を作成します。あなたは+またはクリックすると - あなたのItemCellのボタンを、このようなtotalPriceに必要な値を追加し、どこitemPriceValueあなたが追加しているものです:今

self.totalPrice += itemPriceValue 

、あなたはorderPriceLabel等しいtotalPriceの値にすることができます。また、UITableViewの更新を確認するには、このメソッドをTableViewControllerコードの下部に追加します。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    self.tableView.reloadData() 
} 
+0

ボタンがItemCellクラスに格納されているため、これは機能しません。現在、私は適切に更新するグローバル変数を使用していますが、HeaderCellでは更新されません。 – madrhatter

関連する問題