使用自定义单元格在两个 UITableView 之间传递数据

Posted

技术标签:

【中文标题】使用自定义单元格在两个 UITableView 之间传递数据【英文标题】:pass data between two UITableView with custom cell 【发布时间】:2016-04-11 05:11:40 【问题描述】:

我要将数据从 UITableViewController 传递到另一个 UITableViewController。这两个 UITableViewController 中有自定义单元格。 当我通过 segue 传递数据时,我无法从 sourceViewController 获取数据,因为它说我在自定义 UITableViewCell 控制器中构建的标签没有成员。

在 menuController 中找不到成员的主要问题。我需要将自定义单元格继承或委托给 menuController 还是推送它?

这是ordersController的代码:

import UIKit
struct Order  
   var tilte:String 
   var price:String 
   var quantity:String


class ordersController: UITableViewController 
var orders = Array<Order>()

override func viewDidLoad() 
    super.viewDidLoad()


//handle exit from Cancel back of menuController
@IBAction func cancelBack(segue: UIStoryboardSegue)


//handle exit from Done back of menuController
@IBAction func doneBack(segue: UIStoryboardSegue)
    print("Done and Back")

    //let source = segue.sourceViewController as! newMenu
    //let quantity = source.burgerQuan.text



override func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    return 1


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return self.orders.count


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("orderedItem", forIndexPath: indexPath) as! ordersCustomCell

    let order:Order = self.orders[indexPath.row]
    cell.ordersName.text = orders[indexPath.row].title
    cell.ordersPrice.text = orders[indexPath.row].price
    cell.ordersQuantity.text = orders[indexPath.row].quantity

    return cell


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()


这里是ordersController的Custom Cell的代码:

class ordersCustomCell: UITableViewCell 

@IBOutlet weak var ordersName: UILabel!
@IBOutlet weak var ordersPrice: UILabel!
@IBOutlet weak var ordersQuantity: UILabel! 

override func awakeFromNib() 
    super.awakeFromNib()


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

这里是menuController的代码:

class menuController: UITableViewController 

var items:[String] = ["Hamburger","French Fries", "Coffee", "Lemon Tea"]
var price:[String] = ["$29", "$13", "$25", "$8"]

override func viewDidLoad() 
    super.viewDidLoad()


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()


override func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    return 1


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return self.items.count


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("menuItem", forIndexPath: indexPath) as! menuCustomCell

    cell.menuName.text = self.items[indexPath.row]
    cell.menuPrice.text = self.price[indexPath.row]

    return cell


这里是 menuController 的自定义单元格的代码:

class menuCustomCell: UITableViewCell 

@IBOutlet weak var menuName: UILabel!
@IBOutlet weak var menuPrice: UILabel!
@IBOutlet weak var menuQuantity: UILabel!
@IBOutlet weak var stepper: UIStepper!

@IBAction func stepperValueChanged(sender: UIStepper) 
    menuQuantity.text = Int(sender.value).description


override func awakeFromNib() 
    super.awakeFromNib()


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


我该怎么做? --> 单击订单中的添加按钮时,会显示菜单。用户单击步进器选择数量。然后,当用户单击完成时,数据会传回订单。数量不为 0 的商品将显示在 Orders 列表中。

【问题讨论】:

【参考方案1】:

您的menuController 类没有那个变量menuName,这就是它找不到它的原因。

您在该视图控制器中只有itemsprice

您的自定义单元格中有menuName。这也与您正在推送的 viewController 不同。

【讨论】:

所以我需要在 menuController 和 menuCustomCell 中分配这些 Outlets? 您使用的是表格视图,因此 cellForRowAtIndexPath 将填充单元格。这通常是一组项目。如果你有静态单元格——那么你不需要子类化它们——你可以直接创建到视图控制器的出口。

以上是关于使用自定义单元格在两个 UITableView 之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 可重用的自定义单元格在子视图中显示错误的内容

UITableView 中的自定义单元格在滑动编辑后立即移动

用于 UITableView 的自定义 XIB 单元格在滚动时卡住/卡住

UITableView 自定义单元格在 iPad Storyboard 上不起作用,但在 iPhone 上起作用

iOS - 使 UITableView 与自定义单元格在按钮单击时可编辑

UITableView 单元格在向下滚动然后备份后消失