How to use delegates to communicate data from a custom cell to a label in the parent view

后端 未结 3 1218
梦如初夏
梦如初夏 2020-12-28 11:34

I have figured out how to pass data between views with delegates in other situations but this one is stumping me.

In this example I am trying to send data resultin

相关标签:
3条回答
  • 2020-12-28 12:08

    Thanks to i_am_jorf for the solution, here is the code that works.

    //
    //  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)
    
        }
    }
    
    0 讨论(0)
  • 2020-12-28 12:17

    Do you need to use Delegates?

    What if you have this function output a number:

    func processThatNumber(theNumber: Int) -> Int {
        println("out : \(theNumber)")
        return theNumber
    }
    

    Then set the text on the label using the button:

    @IBAction func addButton(sender: AnyObject) {
        self.sumNumber += 5
        sumLabel.text = "\(processThatNumber(self.sumNumber))"
        println(sumNumber)
    }
    

    Would that work for you?

    0 讨论(0)
  • 2020-12-28 12:19

    You should set the delegate here:

      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
      }
    
    0 讨论(0)
提交回复
热议问题