2015-11-08 68 views
0

我有一個TableViewController與原型類型的單元格。它由來自.plist的帶有字典數組的標籤和ImageView填充。我如何將這些數據傳遞給詳細視圖?詳細視圖是UIViewController子類。我已經嘗試了來自不同教程的方法,但我找不到合適的組合來使其工作。代碼示例會很棒!如何將數據從基於plist的UITableView傳遞到UIViewController

import UIKit 

class OurMenuViewController: BaseViewController { 

@IBOutlet weak var tableView: UITableView? 




var menuItems: [MenuItem] = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    menuItems = MenuItemsManager.sharedManager.loadData() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
} 

// MARK: - UITableViewDataSource 
extension OurMenuViewController: UITableViewDataSource { 

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath:  NSIndexPath) -> UITableViewCell { 
    let cell: MenuItemTableViewCell = tableView.dequeueReusableCellWithIdentifier("menuItemCell") as! MenuItemTableViewCell 
    let item = menuItems[indexPath.row] 

    //display data from MenuItems.plist 
    cell.menuItemNameLabel?.text = item.name 
    cell.ingredientsItemLabel?.text = item.ingredients 
    cell.priceItemLabel?.text = item.price 
    cell.menuItemImageView?.image = UIImage(named: item.image) 

    if let discount = item.discount { 
     cell.discountLabel?.text = discount 
     cell.discountView?.hidden = false 
    } else { 
     cell.discountView?.hidden = true 
    } 

    cell.backgroundColor = UIColor.clearColor() 

    return cell 
} 

我創造了另一種的viewController名爲DetailViewController,所以在DetailViewController我想告訴所有關於從OurMenuViewController食品的細節,但我無法通過賽格瑞合格也許是因爲缺乏相關知識的數據,(可以請你幫助我如何從MenuItems.plistOurMenuViewController)數據傳遞到DetailViewController

import UIKit 

class DetailViewController: UIViewController { 

@IBOutlet weak var itemNameLabel: UILabel? 
@IBOutlet var itemImageView: UIImageView? 
private var menuItems: [MenuItem] = [] 
//var restaurantImage:String! 


override func viewDidLoad() { 
    super.viewDidLoad() 
    menuItems = MenuItemsManager.sharedManager.loadData() 

    itemImageView!.image = ????????????????????? 
    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

回答

0

首先在你的故事板,你需要故事板Segue公司Identifire設定SIDDetail例如

其次,你需要在你的DetailViewController類來創建setData方法,例如像這樣:

class DetailViewController: UIViewController { 
    var currentItem: MenuItem? 
    ... 
    func setData(item: MenuItem) { 
     currentItem = item 
    } 
    ... 
} 

然後你需要重寫prepareForSegue方法在OurMenuViewController這樣的:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let identifier = segue.identifier { 
     if identifier == "SIDDetail" { 
      if let cell = sender as? MenuItemTableViewCell { 
       if let index = self.tableView.indexPathForCell(cell)?.row { 
        let detailViewController = segue.destinationViewController as! DetailViewController 
        detailViewController.setData(menuItem[index]) 
       } 
      } 
     } 
    } 
} 
相關問題