2016-12-04 83 views
0

好吧,所以我基本上試圖做的是將數據從UITableViewCell類傳遞到UIViewController類。下面是我的UITableViewCell:將數據從UITableViewCell cocoa touch類傳輸到UIViewController類

class OrderCell: UITableViewCell { 

override func awakeFromNib() { 
    super.awakeFromNib() 

} 

var post: OrderModel! 
var link: Link! 

var addedList: [String:Float] = [:] 


@IBOutlet weak var dishName: UILabel! 
@IBOutlet weak var dishDescriptionAndPrice: UILabel! 
@IBOutlet weak var numberOfOrders: UILabel! 
@IBOutlet weak var addOrderBtn: UIButton! 
@IBOutlet weak var subtractOderBtn: UIButton! 

@IBAction func addButtonPressed(sender: AnyObject) { 
    if numberOfOrders.text == "9" { 
     numberOfOrders.text = "9" 
    } else { 
     numberOfOrders.text = String((Int(numberOfOrders.text!)! + 1)) 
    } 
    addedList.updateValue(post.dishPrice, forKey: post.dishName) 
    print(addedList) 
} 

@IBAction func subtractButtonPressed(sender: AnyObject) { 
    if numberOfOrders.text == "0" { 
     numberOfOrders.text = "0" 
    } else { 
     numberOfOrders.text = String((Int(numberOfOrders.text!)! - 1)) 
    } 
} 

func getOrders() -> Dictionary<String, Float> { 
    return addedList 
} 


func configureCell(post: OrderModel) { 
    self.post = post 
    self.dishName.text = post.dishName 
    self.dishDescriptionAndPrice.text = post.dishDescription 
    self.numberOfOrders.text = "0" 
} 

} 

我所要做的,就是有我的其他類(是的UIViewController),從上面的類檢索「addedList」。我顯然不能使用prepareForSegue,而且我也沒有找到一種方法來實現與這兩個類的兼容。我很樂於創建一個新班級作爲兩者之間的「橋樑」並傳輸數據,但我再次找不到辦法做到這一點。任何和所有的幫助非常感謝,提前謝謝。

爲了得到更具體的結果,UIViewController保存了我的tableview,而上面的類只是每個單獨單元的對象文件。我需要在調用addButtonPressed IBaction時傳輸數據。

+0

你的UIViewController是包含你的表視圖的類嗎? 2之間的聯繫是什麼?你想什麼時候從單元中檢索'addedList'?當一個單元格被選中時? –

+0

感謝您的回覆。我在底部更新了我的問題以回答這些問題。 –

回答

0

你可以在你的類創建一個代表做到這一點。而在你的視圖控制器類,下在indexPath行單元格,添加:

cell.delegate = self 

和更新你的類是這樣的:

protocol ClassNameDelegate:class { 
     func addButtonAction(addedList:[String:Float]) 
    } 

     @IBOutlet weak var dishName: UILabel! 
     @IBOutlet weak var dishDescriptionAndPrice: UILabel! 
     @IBOutlet weak var numberOfOrders: UILabel! 
     @IBOutlet weak var addOrderBtn: UIButton! 
     @IBOutlet weak var subtractOderBtn: UIButton! 


     //Create a delegate 

     weak var delegate: ClassNameDelegate? 

     @IBAction func addButtonPressed(sender: AnyObject) { 
      if numberOfOrders.text == "9" { 
       numberOfOrders.text = "9" 
      } else { 
       numberOfOrders.text = String((Int(numberOfOrders.text!)! + 1)) 
      } 
      addedList.updateValue(post.dishPrice, forKey: post.dishName) 
      print(addedList) 

      // Call this when added list is done and get the call to your view controller. 

      if delegate != nil { 
       delegate?.addButtonAction(addedList: addedList) 
      } 
     } 

     @IBAction func subtractButtonPressed(sender: AnyObject) { 
      if numberOfOrders.text == "0" { 
       numberOfOrders.text = "0" 
      } else { 
       numberOfOrders.text = String((Int(numberOfOrders.text!)! - 1)) 
      } 
     } 

     func getOrders() -> Dictionary<String, Float> { 
      return addedList 
     } 


     func configureCell(post: OrderModel) { 
      self.post = post 
      self.dishName.text = post.dishName 
      self.dishDescriptionAndPrice.text = post.dishDescription 
      self.numberOfOrders.text = "0" 
     } 

     } 

最後,在您的視圖控制器類導入此委託方法,與導入tableView委託和數據源的方式相同。

+0

這是給我一個錯誤,我的UIViewControllerClass不符合協議'ClassNameDelegate' –

+0

你在視圖控制器類中導入這個方法:func addButtonAction(addedList:[String:Float])? –

+0

你應該讓自己熟悉協議和對它們的遵從性,這對於你正在編寫的語言來說是最基本的...... – Wain

0

單元格不是存儲這種信息的好地方。您應該將信息存儲在視圖控制器中。並且當你按下單元格按鈕時,由於單元格的索引路徑而檢索信息。

在你的細胞:

func configureCell(post: OrderModel, delegate:UIViewController) { 
    self.dishName.text = post.dishName 
    self.dishDescriptionAndPrice.text = post.dishDescription 
    self.numberOfOrders.text = "0" 
    self.addButton.addTarget(delegate, action: #selector(delegate.addButtonPressed(_:)), for: UIControlEvents.touchUpInside) 
} 

在您的視圖控制器:

//store your data in your view controller 
var data=[OrderModel]() 

func addButtonPressed(_ button:UIButton){ 
    let selectedCell=button.superview?.superview? as! OrderCell 
    let indexPath=tableView.indexPath(for: selectedCell) 
    let cellData=data[indexPath!.row] 

    if cellData.numberOfOrders==9{ 
     selectedCell.numberOfOrders.text="9" 
    }else{ 
     selectedCell.numberOfOrders.text=String(cellData.numberOfOrders+1) 
    } 
} 
+0

感謝您的回覆。它似乎給了我一個錯誤,'UIControlEvents'沒有成員'touchUpInside' –

+0

奇怪,你在Swift 3編碼? –

+0

當你開始輸入時,它會提出什麼建議? –

相關問題