Ich habe herausgefunden, wie Daten zwischen Ansichten mit Delegaten in anderen Situationen übergeben, aber dieses hier stempelt mich.Delegaten zu verwenden, um Daten aus einer benutzerdefinierten Zelle an ein Label in der übergeordneten Ansicht zu kommunizieren
In diesem Beispiel versuche ich, Daten zu senden, die aus dem Drücken einer Schaltfläche resultieren, bis zu dem Etikett, das ein Delegatenmuster aber ohne Erfolg verwendet. Meine Vermutung ist, dass mir hier etwas Grundlegendes fehlt und ich habe keine Beispiele gefunden, die sich auf diese Weise mit Delegierten befassen.
//
// 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)
}
}
Der Viewcontroller und CellViewController sind
ihren jeweiligen Klassen verbundenVielen Dank im Voraus.
DANKE! Wenn ich die Argumentation richtig verstehe, liegt es daran, dass hier die Zelle instanziiert wird und dadurch für jede Zelle eine Verbindung zum Elternteil hergestellt wird? –
Das ist richtig. –
Das verbindet meine Verständnislücke für Delegierte. Danke noch einmal. –