将数据从 UITableViewCell 可可触摸类传输到 UIViewController 类
Posted
技术标签:
【中文标题】将数据从 UITableViewCell 可可触摸类传输到 UIViewController 类【英文标题】:Transferring data from a UITableViewCell cocoa touch class to a UIViewController class 【发布时间】:2016-12-04 18:21:56 【问题描述】:好的,所以我实际上要做的是将数据从 UITableViewCell 类传输到 UIViewController 类。下面是我的 UITableViewCell:
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 时传输数据。
【问题讨论】:
你的 UIViewController 是包含你的表格视图的类吗? 2之间有什么联系?您想什么时候从单元格中检索“addList”?何时选择单元格? 感谢您的回复。我已在底部更新了我的问题以回答这些问题。 【参考方案1】:您可以通过在您的单元类中创建一个委托来做到这一点。在您的视图控制器类中,在 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 委托和数据源一样。
【讨论】:
这给了我一个错误,我的 UIViewControllerClass 不符合协议 'ClassNameDelegate' 您是否在视图控制器类中导入了这个方法:func addButtonAction(addedList:[String:Float])? 您应该熟悉协议并遵守它们,这是您编写的语言的基础...... 这很完美,正是我想做的。非常感谢。【参考方案2】:单元格不是存储此类信息的好地方。您应该将信息存储在视图控制器中。当您按下单元格按钮时,通过单元格的索引路径检索信息。
在你的牢房里:
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)
【讨论】:
感谢您的回复。 'UIControlEvents' 没有成员 'touchUpInside' 似乎给了我一个错误 奇怪,你是用 Swift 3 编码的吗? 当你开始打字时,它会给你什么建议?以上是关于将数据从 UITableViewCell 可可触摸类传输到 UIViewController 类的主要内容,如果未能解决你的问题,请参考以下文章