如何使用委托将数据从自定义单元格传递到父视图中的标签
How to use delegates to communicate data from a custom cell to a label in the parent view
我已经想出了在其他情况下如何在与代表的视图之间传递数据,但是这个让我很困惑。
在这个例子中,我尝试使用委托模式将按下按钮产生的数据发送到标签,但没有成功。我的猜测是我在这里遗漏了一些基本的东西,而且我还没有找到任何以这种方式处理代表的例子。
//
// 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
}
您需要使用委托吗?
如果你让这个函数输出一个数字会怎么样:
func processThatNumber(theNumber: Int) -> Int {
println("out : \(theNumber)")
return theNumber
}
然后使用按钮设置标签上的文本:
@IBAction func addButton(sender: AnyObject) {
self.sumNumber += 5
sumLabel.text = "\(processThatNumber(self.sumNumber))"
println(sumNumber)
}
这对你有用吗?
感谢 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)
}
}
我已经想出了在其他情况下如何在与代表的视图之间传递数据,但是这个让我很困惑。
在这个例子中,我尝试使用委托模式将按下按钮产生的数据发送到标签,但没有成功。我的猜测是我在这里遗漏了一些基本的东西,而且我还没有找到任何以这种方式处理代表的例子。
//
// 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
}
您需要使用委托吗?
如果你让这个函数输出一个数字会怎么样:
func processThatNumber(theNumber: Int) -> Int {
println("out : \(theNumber)")
return theNumber
}
然后使用按钮设置标签上的文本:
@IBAction func addButton(sender: AnyObject) {
self.sumNumber += 5
sumLabel.text = "\(processThatNumber(self.sumNumber))"
println(sumNumber)
}
这对你有用吗?
感谢 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)
}
}