Ich habe gerade eine App erstellt und angefangen, @ IBOutlets mit dem Storyboard zu verbinden. Ich verbinde einige von ihnen mit Beschriftungen in einer UITableViewCell-Prototypzelle mit einem Basisstil. Wenn ich es verbinde, wird im Storyboard der folgende Fehler angezeigt:
Das detailText Outlet vom TableViewController zum UILabel ist ungültig. Outlets können nicht mit sich wiederholenden Inhalten verbunden werden.
Kann mir jemand helfen? Ich habe es so eingerichtet, wie ich es immer erfolgreich gemacht habe, aber dieses Mal hat es mir diesen Fehler beschert.
ios
storyboard
Tomblasta
quelle
quelle
Antworten:
Erstellen Sie eine Unterklasse für Tabellenansichtszellen und legen Sie sie als Klasse des Prototyps fest. Fügen Sie die Steckdosen dieser Klasse hinzu und verbinden Sie sie. Wenn Sie nun die Zelle konfigurieren, können Sie auf die Steckdosen zugreifen.
quelle
Es gibt zwei Arten von Tabellenansichtszellen, die Ihnen über das Storyboard zur Verfügung gestellt werden: dynamische Prototypen und statische Zellen
1. Dynamische Prototypen
Aus dem Namen wird dieser Zelltyp dynamisch generiert. Sie werden über Ihren Code gesteuert, nicht über das Storyboard. Mithilfe des Delegaten und der Datenquelle der Tabellenansicht können Sie die Anzahl der Zellen, die Höhe der Zellen und den Prototyp der Zellen programmgesteuert angeben.
Wenn Sie eine Zelle in Ihre Tabellenansicht ziehen, deklarieren Sie einen Prototyp von Zellen. Sie können dann eine beliebige Anzahl von Zellen erstellen, die auf diesem Prototyp basieren, und diese
cellForRow
programmgesteuert über die Methode zur Tabellenansicht hinzufügen . Dies hat den Vorteil, dass Sie nur einen Prototyp definieren müssen, anstatt jede einzelne Zelle mit allen Ansichten zu erstellen, die Sie selbst hinzugefügt haben (siehe statische Zelle).In diesem Fall können Sie keine UI-Elemente auf dem Zellenprototyp mit Ihrem View Controller verbinden. Sie haben nur ein View Controller-Objekt initiiert, aber möglicherweise haben Sie viele Zellenobjekte initiiert und zu Ihrer Tabellenansicht hinzugefügt. Es ist nicht sinnvoll, den Zellenprototyp mit dem View Controller zu verbinden, da Sie nicht mehrere Zellen mit einer View Controller-Verbindung steuern können. Und Sie werden eine Fehlermeldung erhalten, wenn Sie dies tun.
Um dieses Problem zu beheben, müssen Sie Ihr Prototypetikett mit einem
UITableViewCell
Objekt verbinden. AUITableViewCell
ist auch ein Prototyp von Zellen, und Sie können so viele Zellenobjekte initiieren, wie Sie möchten. Jedes von ihnen wird dann mit einer Ansicht verbunden, die aus Ihrem Storyboard-Tabellenzellenprototyp generiert wird.Schließlich in Ihrer
cellForRow
Methode erstellen aus der die benutzerdefinierten ZelleUITableViewCell
Klasse und macht lustige Sachen mit dem Etikett2. Statische Zellen
Andererseits werden statische Zellen tatsächlich über das Storyboard konfiguriert. Sie müssen UI-Elemente in jede einzelne Zelle ziehen, um sie zu erstellen. Sie steuern die Zellennummern, -höhen usw. über das Storyboard. In diesem Fall wird eine Tabellenansicht angezeigt, die auf Ihrem Telefon genau dieselbe ist wie auf dem Storyboard. Statische Zellen werden häufiger zum Einstellen von Seiten verwendet, wobei sich die Zellen nicht stark ändern.
Um UI-Elemente für eine statische Zelle zu steuern, müssen Sie sie tatsächlich direkt mit Ihrem View Controller verbinden und einrichten.
quelle
+100
Wenn Sie eine Tabelle im Hinblick auf Display - Einstellungen und andere Optionen verwenden (wie die eingebauten Einstellungen App der Fall ist), dann können Sie Ihr Set Tabellenansicht Inhalt zu Static Cells unter der Inspektor Attribute . Dazu müssen Sie Ihre Tabellenansicht in eine UITableViewController-Instanz einbetten.
quelle
Oder Sie müssen IBOutlet nicht verwenden , um auf das Objekt in der Ansicht zu verweisen. Sie können dem Label in der tableViewCell einen Tag-Wert geben, z. B. das Tag auf 123 setzen (dies kann vom Attributinspektor durchgeführt werden). Dann können Sie über auf das Etikett zugreifen
quelle
Bei mir habe ich eine
UIViewcontroller
, und darin habe ich eine Tabellenansicht mit einer benutzerdefinierten Zelle. Ich ordne meine UILabel-SteckdoseUItableviewcell
demUIViewController
dann den Fehler zu.quelle
Wie die meisten Leute darauf hingewiesen haben, dass Unterklassen
UITableViewCell
dieses Problem lösen. Der Grund dafür ist jedoch nicht zulässig, da die Prototypzelle ( UITableViewCell ) von Apple definiert wurde und Sie keine eigenen Steckdosen hinzufügen können.quelle
Manchmal konnte Xcode die korrekte Verbindung der Zellensteckdose nicht steuern.
Irgendwie hat das Etikett / die Schaltfläche meiner aktuellen Zelle eine andere Zelle verbunden. Ich entferne diese einfach und der Fehler verschwindet.
quelle
Klicken Sie auf Simulator, navigieren Sie zum Fenster und aktivieren Sie Geräteblenden
quelle