/ / Swift benutzerdefiniertes UITableViewCell-Label ist immer gleich Null - ios, iphone, uitableview, cocoa-touch, swift

Das schnelle benutzerdefinierte UITableViewCell-Label ist immer gleich Null - Ios, iPhone, UitableView, Cocoa-Touch, Swift

Ich bin seit Tagen mit diesem Problem beschäftigt, alsoIch würde mich sehr freuen, wenn jemand helfen könnte. Ich versuche, eine dynamische UITableView zu erstellen, für die ich eine benutzerdefinierte UITableView-Unterklasse erstellt habe, und ich habe auch eine benutzerdefinierte UITableViewCell-Unterklasse erstellt, da ich in jeder Zelle mehrere UILabels und einen UIButton benötige. Die Zelle wird erstellt, aber das Problem ist, dass der Wert der Beschriftungen immer Null ist, daher wird die Zelle nicht richtig angezeigt. Das ist, wie das Storyboard aussieht und das ist Was ich beim Ausführen des Programms sehe.

Hier ist meine UITableViewCell-Unterklasse:

import UIKit

class QuestionTableViewCell: UITableViewCell {

@IBOutlet var student: UILabel!
@IBOutlet var labDesk: UILabel!
@IBOutlet var topic: UILabel!
@IBOutlet var answers: UILabel!

}

und meine UITableView-Unterklasse:

import UIKit

class QuestionViewController: UITableViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet var table: UITableView!
struct Question {
var student: String
var labDesk: String
var topic: String
var answered: String
}

override func viewDidLoad() {
super.viewDidLoad()
table.estimatedRowHeight = 50
table.dataSource = self
table.delegate = self
self.table.registerClass(QuestionTableViewCell.self, forCellReuseIdentifier: "cell")
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as QuestionTableViewCell
cell.student.text = "random string"
cell.labDesk?.text = "25/A"
cell.topic?.text = "string"
cell.answers?.text = "3"
return cell
}
}

Antworten:

34 für die Antwort № 1

Versuche es zu entfernen self.table.registerClass(QuestionTableViewCell.self, forCellReuseIdentifier: "cell")


15 für die Antwort № 2

Wenn Sie eine Zelle mit einer Schreibfeder verwenden, stellen Sie sicher, dass Sie die Zelle in der Tabellenansicht mit registrieren registerNib:forCellReuseIdentifier:. Wenn die Zelle nur eine Klasse hat, verwenden Sie registerClass:forCellReuseIdentifier:.


5 für die Antwort № 3

Zunächst müssen Sie die Klasse nicht registrieren, wenn sie im Interface Builder vorhanden ist.

Zweitens sollten Sie dequeueReusableCellWithIdentifier:forIndexPath Anstatt von dequeueReusableCellWithIdentifier.

Dritte, UITableViewController hat bereits eine Eigenschaft namens tableView Es ist also nicht erforderlich, ein IBOutlet zu erstellen table da UITableViewController dies bereits erledigt. Es entspricht auch dem UITableViewDataSource und UITableViewDataSource diese sind also irrelevant.

Viertens, stellen Sie die Eigenschaften für nicht ein table setze sie für tableView.

Fünfte, cell.labDesk.text = "" ist ausreichend, keine Notwendigkeit, es optional zu machen.

Wenn alle Ihre IBOutlets angeschlossen sind, die Zellkennungen korrekt eingestellt sind und diese Überarbeitungen vorgenommen wurden, funktioniert dies.

class QuestionTableViewCell: UITableViewCell {

@IBOutlet var student: UILabel!
@IBOutlet var labDesk: UILabel!
@IBOutlet var topic: UILabel!
@IBOutlet var answers: UILabel!

}


class QuestionViewController: UITableViewController {

struct Question {
var student: String
var labDesk: String
var topic: String
var answered: String
}

override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 50
tableView.dataSource = self
tableView.delegate = self
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as QuestionTableViewCell
cell.student.text = "random string"
cell.labDesk.text = "25/A"
cell.topic.text = "string"
cell.answers.text = "3"
return cell
}
}

1 für die Antwort № 4

Für diejenigen, die immer noch versuchen, dies herauszufinden, nachdem sie alle möglichen Lösungen ausprobiert haben:

Das Trennen / Wiederverbinden der IBOutlets in Ihren Storyboards sollte den Trick machen!


0 für die Antwort № 5

Ich bin vielleicht zu spät hier, aber ich habe gerade ein ähnliches Problem gelöst.

Stellen Sie sicher, dass Sie den Bezeichner in InterfaceBuilder auf Ihrer UITableViewCell festgelegt haben.

Bildbeschreibung hier eingeben