2009-06-04 23 views
8

Ich habe eine UITableView mit einer benutzerdefinierten UITableViewCell. In cellForRowAtIndexPath weise ich einer Beschriftung in jeder Zelle eine Schriftart zu, da der Benutzer die Schriftgröße jederzeit ändern kann. Um die Schriftgröße zu ändern, klickt der Benutzer auf eine Schaltfläche unter der Tabellenansicht, die eine andere Ansicht mit Einstellungen anzeigt. Sobald sie eine Schriftgröße ausgewählt haben und auf "Fertig" klicken, wird diese Ansicht entfernt und die Tabellenansicht wird erneut angezeigt. Ich zeige eine Zelle pro Sichtfläche an. Der Benutzer sieht die Änderung der Schriftart erst, wenn er zur nächsten Zelle scrollt. Die aktuelle Zelle ist diejenige, die ich aktualisieren möchte.Wie aktualisiert man UITableViewCell?

Ich habe ReloadData aus dem Einstellungsbildschirm versucht, aber das hat nicht funktioniert. Die Tabellenansicht ist ein UITableViewController, aber viewWillAppear wird nie ausgelöst, wenn der Einstellungsbildschirm nicht mehr angezeigt wird. Ich habe versucht, die benutzerdefinierte Zelle zu einer Eigenschaft der Tabellenansicht zu machen, so dass auf sie über die Einstellungsansicht zugegriffen werden kann, und dann setNeedsDisplay und setNeedsLayout aufgerufen wird. Die haben auch nicht funktioniert. Irgendwelche Vorschläge?

Antwort

5

Für die Zellen, die noch da sind, müssen Sie die Schriftart des Etiketts aktualisieren. Sie benötigen eine Möglichkeit, auf das benutzerdefinierte Label in Ihrer benutzerdefinierten Zelle zuzugreifen.

Nach dem Ändern der Schriftgröße so etwas wie:

for (MyCell* cell in [theTableView visibleCells]) { 
    [cell.myLabel.font = newFont]; 
} 
+0

Ich habe Ihren Code in der Ansicht Einstellungen versucht, aber immer noch keine Änderung an der aktuellen Zelle, sobald die Tabellenansicht angezeigt wird. Wenn ich nur reloadData in der Tabellenansicht aus der Einstellungsansicht aufruft, funktioniert es einwandfrei. Dies scheint jedoch ein sehr teurer, übertriebener Weg zu sein. – 4thSpace

+0

Ich habe meine Antwort bearbeitet, nachdem ich das Problem besser verstanden habe. –

+0

Vielen Dank! – Luda

0

Ich bin gespannt, wie Sie Ihre Einstellungen Bildschirm angezeigt werden? viewWillAppear sollte unter normalen Umständen bei der Rückkehr aufgerufen werden. Sie

[self presentModelViewController:animated:] 

oder

[self.navigationController pushViewController:animated:] 

Diese sollten beide Arbeit. Wenn Sie dagegen die Ansicht "Einstellungen" nur als Teilansicht des Fensters oder der aktuellen Ansicht oder etwas hinzufügen, wird das Entfernen nicht auf dem Tabellenansicht-Controller viewWillAppear aufgerufen.

Also, wenn Sie nicht eine dieser beiden Methoden verwenden, tun. Wenn Sie bereits sind, dann ist das Einstellen der Schriftart der Zelle wirklich so einfach wie das Abrufen der Zelle und das Festlegen der Schriftart. Wenn Sie ein Standard UITableViewCell verwenden, ist das getan mit

cell.font = newFont; 

Wenn Sie eine benutzerdefinierte Unterklasse verwenden, offensichtlich kann ich Ihnen nicht genau sagen, wie es arbeiten muss, aber die Art und Weise Nikolai hat es richtig ist .

+0

Ich verwende presentModalViewController. Die folgende Lösung hat gut funktioniert. – 4thSpace

12

Rufen Sie in Ihrer benutzerdefinierten UITableViewCell [self setNeedsLayout]; und es sollte Ihre Zelle bei der nächsten Schleife neu streichen. Ich benutze es für das asynchrone Laden von Bildern, da ich das Bild aus dem Web ziehe und es funktioniert.

+0

Das hat bei mir funktioniert, danke. Ich habe KVO, wo ich wirklich nur eine Zelle nachladen möchte, also funktioniert das gut. – Sam

Verwandte Themen