2016-07-26 8 views
-1

Ich fange gerade mit Swift und xCode an, und derzeit mit UITableView rumzualbern, kann ich nicht einfach 'test' in eine Tabelle schreiben.UITableViewController zeigt nichts als horizontale Linien

Ich habe eine UITableViewController im Storyboard, spezifiziert eine benutzerdefinierte Klasse für sie (meine rasche Datei unten), gefüllt in ‚ClientCell‘ als Wiederverwendung Kennung der Zelle und der Code ist wie folgt:

class TableViewController: UITableViewController { 


    @IBOutlet var clientTable: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     clientTable.dataSource = self.dataSource; 
     clientTable.delegate = self; 
    } 

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("ClientCell", forIndexPath: indexPath) as! CustomTableViewCell 
     cell.tableLabel.text = "test" 

     return cell 
    } 
} 

Im Storyboard habe ich ein "UILabel" in die Prototyp-Zelle eingefügt und in CustomTableViewCell.swift einen Anschluss für dieses mit dem Namen "tableLabel" erstellt. Ich verwirrt durch all die Nebensächlichkeiten, die ich beachten muss, wenn ich etwas so einfaches wie dieses tue. Wenn ich es benutze, zeigt der Simulator nur eine Tabelle mit vielen horizontalen Linien, aber nirgends heißt es "Test".

+0

Sie schreiben Ihre Tabellenansicht-Datenquellenmethoden innerhalb Ihrer viewDidLoad() - Überschreibung. Es wird niemals funktionieren. Verschieben Sie numberOfRowsInSection und cellForRowAtIndexPath in eine Klassenerweiterung, und deklarieren Sie sie außerhalb anderer Funktionskörper. – Dare

+0

@Dare Mit in eine Klassenerweiterung meinst du kurz vor der viewDidLoad()? – ffritz

+0

Nein, das ist was ich meine. https://github.com/raywenderlich/swift-style-guide#protocol-conformance – Dare

Antwort

1

Sie haben die numberOfRowsInSection-Methode nicht verwendet ..... Zusätzlich müssen Sie auch die Datenquelle und Delegate der Tabellenansicht als die Klasse festlegen, in die Sie diese Methoden schreiben (falls nicht).

+0

Danke fürs Beantworten. Ich habe meinen Code aktualisiert und auch hier bearbeitet. Ich habe jedoch immer noch das gleiche Problem. Nehme ich richtig an, dass Datenquelle und Stellvertreter beide selbst sind? – ffritz

+0

Sie sind, wenn Sie sie nicht anders festlegen. Es ist auch möglich, dass das automatische Layout Ihrer Prototypzelle falsch ist, daher ist der Text nicht sichtbar. –

+0

Sie können auch versuchen, sich die Ansichten anzusehen, die in der App gemacht wurden. Wenn Sie die App im Simulator ausführen, können Sie die Ansichtshierarchie debuggen und feststellen, ob die Zelle erstellt wurde. Wenn dies der Fall ist, sollten Sie sich Ihre Einschränkungen ansehen. – Rikh

0

Als absolutes Minimum müssen Sie dies:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 // this should really be from your data source 
} 

Wenn Sie eine UITableViewController Unterklasse in Xcode die Vorlage haben kommentiert-out-Versionen aller Methoden erstellen möchten Sie wahrscheinlich heraus zu füllen.

+0

Ist das nicht schon bei der letzten Methode in meinem obigen Code? Ich bekomme einen Fehler dort. – ffritz

+0

@FelixF. Nein, das wird nicht mit der letzten Methode gemacht. Die letzte Methode besteht darin, wie Sie jede Zelle beim Laden anpassen. numberOfRowsInSection gibt zurück, wie viele Zellen in Ihrer Tabelle angezeigt werden. Ohne dass Sie sehen, 0 Zellen erscheinen –