2017-01-28 1 views
0

Voraussetzung:UITableViewCells unsichtbar

Ich habe eine Liste von UITableviewCell von einem nib geladen, die ich auf UITableview präsentierte. Beim ersten Öffnen der UIViewController werden alle Zellen korrekt angezeigt und funktionieren wie erwartet.

Ausgabe:

Wenn ich auf das übergeordnete Ebene zurück und öffnen Sie dann die UIViewController wieder die UITableviewCell sind ‚unsichtbar‘. Ich sage unsichtbar, weil ich mit einem Breakpoint in sehe, dass die Tabellenansicht alle Zellen lädt und die Zellen gültig sind.

Code:

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 13 
} 
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    return 40 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = (project?.sliderData.sliders[indexPath.row].view)! as UITableViewCell 
    print(cell.contentView.subviews.count) 
    if let left = cell.viewWithTag(2) as? UILabel { 
     left.text = "left" 
    } 
    if let middle = cell.viewWithTag(3) as? UILabel { 
     middle.text = "middle" 
    } 
    if let right = cell.viewWithTag(4) as? UILabel { 
     right.text = "right" 
    } 
    return cell 
} 

Screen Shot Bild

enter image description here

Erwartete Beobachtung:

Ich dachte, dass vielleicht die subviews der cells werden veröffentlicht, weil ich keine Bindungen zu ihnen in IB habe. Um dies zu testen, bin ich Drucken der Anzahl der Unteransichten und Schreiben eines Textes auf die subviewlabels. Und alles scheint gut zu gehen, die Zellen sind geladen und die Etiketten sind da, aber die Zellen kommen einfach nicht.

Aber wenn ich scrollen die TableView rauf und runter ein wenig, um einige Zellen aktualisiert diese Zellen erscheinen am oberen und unteren Rand der Ansicht, wie im Bild gezeigt.

+0

Aus dem Screenshot sieht es so aus, als ob nur die obersten und untersten Zellen geladen werden, wenn Sie in der TableView blättern, aber die Zellen in der Mitte der Tabellenansicht nicht sichtbar sind. Ist es richtig? Haben Sie versucht, tableView setNeedsDisplay() aufzurufen, um die Tabellenansicht erneut zu zeichnen? –

+0

Wenn ich die TableView scrollte, werden die Zellen angezeigt, die in den sichtbaren Bereich kommen, d. H. Die, die neu geladen werden, so dass durch Aufprallen der Oberseite einige Elemente sichtbar werden können. Ich habe versucht, setNeedsDisplay() bei ViewDidAppear hinzuzufügen, aber das hat keine Wirkung. – jotos

+0

Warum registrieren Sie die Feder nicht und entfernen die Zellen auf die übliche Weise? – pbasdf

Antwort

0

Haben Sie nicht Grund finden, warum die Tableview die Art und Weise verhält es sich nicht so löste ich das Problem durch Standardzellen Warteschlangenauflösungs. Die Ansichten, die von den Slider-Objekten bereitgestellt werden, werden als Unteransichten zu den aus der Warteschlange genommenen Zellen hinzugefügt. Jetzt können die Subviews natürlich alle UIViews sein.

0

Sie müssen innerhalb Ihres Codes dequeueReusableCell(withIdentifier: "cell") aufrufen, dann wird Ihre Tabellenzelle angezeigt. Es wird die Zelle für alle Zahlen des Zeilendateninhalts wiederverwenden.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! UITableViewCell 
    return cell 
} 

Weitere Details: How to create uitableview with multiple sections in iOS Swift.