如何使用委托将数据从自定义单元格传递到父视图中的标签
我已经想出了在其他情况下如何在代表之间传递数据,但是这个问题困扰着我。
在这个例子中,我试图通过按下button发送数据,直到使用委托模式的标签,但没有任何成功。 我的猜测是,我错过了一些基本的东西,而且我还没有发现任何与这种方式有关的代表。
// // ViewController.swift // TableCellDelegate // // Created by Chris Cantley on 6/1/15. // Copyright (c) 2015 Chris Cantley. All rights reserved. // import UIKit class ViewController: UIViewController, CellInfoDelegate { var cellViewController = CellViewController() //The place to put the number into. @IBOutlet weak var sumLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() cellViewController.delegate = self } //2)...to here. func processThatNumber(theNumber: Int) { println("out : \(theNumber)") } } // Table View delegates extension ViewController: UITableViewDataSource, UITableViewDelegate { //One row func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } // Load custom cell func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("thisCustomCell", forIndexPath: indexPath) as! CellViewController return cell } } //-------------------- Protocol for Delegate ----------------------- protocol CellInfoDelegate { func processThatNumber(theNumber: Int) } //-------------------- Cell to Pass info to Parent ----------------------- class CellViewController: UITableViewCell{ var sumNumber: Int = 0 var delegate: CellInfoDelegate? @IBAction func addButton(sender: AnyObject) { // increment that number self.sumNumber += 5 //1) I want to get it from here...... but delegate ends up nil if let delegate = self.delegate { delegate.processThatNumber(self.sumNumber) } //Shows that the number is incrementing println(sumNumber) } }
ViewController和CellViewController连接到它们各自的类
提前致谢。
你应该在这里设置代表:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("thisCustomCell", forIndexPath: indexPath) as! CellViewController cell.delegate = self // <-- Set the delegate. return cell }
感谢解决scheme的i_am_jorf,这里是可用的代码。
// // ViewController.swift // TableCellDelegate // // Created by Chris Cantley on 6/1/15. // Copyright (c) 2015 Chris Cantley. All rights reserved. // import UIKit import Foundation class ViewController: UIViewController, CellInfoDelegate { //The place to put the number into. @IBOutlet weak var sumLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() } //2)...to here. func processThatNumber(theNumber: Int) { println("out : \(theNumber)") self.sumLabel.text = toString(theNumber) as String } } // Table View delegates extension ViewController: UITableViewDataSource, UITableViewDelegate { //One row func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } // Load custom cell func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("thisCustomCell", forIndexPath: indexPath) as! CellViewController //SOLUTION : put the Delgate HERE in the place where the cell is instantiated so that there is a connection back // to this class from the Cell class cell.delegate = self return cell } } //-------------------- Protocol for Delegate ----------------------- protocol CellInfoDelegate { func processThatNumber(theNumber: Int) } //-------------------- Cell to Pass info to Parent ----------------------- class CellViewController: UITableViewCell{ var sumNumber: Int = 0 var delegate: CellInfoDelegate? @IBAction func addButton(sender: AnyObject) { // increment that number self.sumNumber += 5 //1) I want to get it from here...... but delegate ends up nil if let delegate = self.delegate { delegate.processThatNumber(self.sumNumber) } //Shows that the number is incrementing println(sumNumber) } }
你需要使用代表吗?
如果你有这个function输出一个数字:
func processThatNumber(theNumber: Int) -> Int { println("out : \(theNumber)") return theNumber }
然后使用button在标签上设置文本:
@IBAction func addButton(sender: AnyObject) { self.sumNumber += 5 sumLabel.text = "\(processThatNumber(self.sumNumber))" println(sumNumber) }
这对你有用吗?