【问题标题】:How to pass data from plist based UITableView to UIViewController如何将数据从基于 plist 的 UITableView 传递到 UIViewController
【发布时间】:2015-11-08 06:27:48
【问题描述】:

我有一个带有原型单元的TableViewController。它填充了来自 .plist 的标签和 ImageViews 以及一个字典数组。如何将此数据传递给详细视图?详细视图是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
}

我创建了另一个名为DetailViewController 的viewController,所以在DetailViewController 中我想显示OurMenuViewController 中有关食物的所有详细信息,但我无法通过segue 传递数据,可能是因为缺乏知识;(可以请您帮我如何将数据从MenuItems.plist (OurMenuViewController) 传递到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.
}

【问题讨论】:

    标签: ios swift uitableview uiviewcontroller segue


    【解决方案1】:

    首先在您的故事板中,您需要将 Storyboard Segue Identifire 设置为 SIDDetail,例如

    其次,您需要在 DetailViewController 类中创建 setData 方法,例如:

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

    然后你需要像这样覆盖OurMenuViewController 中的prepareForSegue 方法:

    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])
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 2020-10-01
      • 2018-04-18
      • 1970-01-01
      相关资源
      最近更新 更多