2016-04-05 13 views
1

In einem UIStackView, ich habe vier Labels zu vier IBOutlet Variablen namens entsprechenden lbl_0, lbl_1, lbl_2, lbl_3.Setzen Sie den Wert mehrerer Variablen

Manchmal muss ich ihren Wert auf eine leere Zeichenfolge festlegen. Ich dachte, ich könnte etwas „schrill“ wie folgt tun:

// inside a loop body 
cell["lbl_"+i].text = "" 

aber es scheint, kann ich nicht („keine Index-Mitglieder“ Fehler).

Also, abgesehen von dem Wert auf diese Weise einstellen:

cell.lbl_0.text = "" 
cell.lbl_1.text = "" 
cell.lbl_2.text = "" 
cell.lbl_3.text = "" 

gibt es eine andere Möglichkeit, den Wert dieser Markierungen zu setzen?

Antwort

2

@IBOutletCollection

Sie jedes Etikett auf die gleiche Outlet Kollektion verbinden können. Um dies zu erreichen, ziehen Sie das erste Etikett per Drag-and-Drop in den Ordner UIViewController, und stellen Sie dann im Popover-Dialogfeld die Verbindung zu Outlet-Sammlung und Name auf labelCollection ein. Dadurch wird ein Array erstellt, in dem Sie die anderen Beschriftungen hinzufügen können.

Und schließlich:

for label in labelCollection { 
    label.text = "" 
} 

oder

UILabel Subviews

Achtung: Dadurch werden alle Beschriftungen in der angegebenen Ansicht zugreifen.

for label: UILabel in self.view.subviews.filter({ $0 as? UILabel }) { 
    label.text = "" 
} 
+0

Das hört sich interessant an, ich fing an, die Mirror API zu verwenden, um die Mitglieder der benutzerdefinierten Zelle mit den Etiketten zu erhalten ... –

+0

Update: Die zweite greift auf alle Etiketten.Was, wenn ich nur auf die zweite, dritte und vierte zugreifen möchte? –

+1

Wenn Sie Beschriftungen in der Ansicht haben, die Sie nicht bearbeiten möchten, würde ich die Verwendung der letzteren for-Schleife abraten und statt dessen für die "IBOutletCollection" gehen. – Laffen

1

Sie könnten jedem Etikett einen Tag zuweisen und dann UIView 's viewWithTag verwenden, um die Etiketten aus dem UIStackView zu extrahieren.

+0

Interessant, danke –

2

Mein erster Gedanke war, dass vielleicht haben Sie so etwas wie

cell.lbl_0.text = cell.lbl_1.text = cell.lbl_2.text = cell.lbl_3.text = "" 

Aber tun könnte, wie es hier heißt es in this fine answer

Sie dies nicht tun. Dies ist eine Sprache-Funktion die Standard unerwünschte Nebenwirkung der Zuordnung der Rückkehr Wert

Also ... es scheint nicht so, nicht ohne die Verwendung eines Outlet Collection als @laffen schlägt vor, zumindest zu verhindern.

Aber wie @ matt-gibson vorschlagen in der Antwort auf die ich Verknüpfen Sie Tupel wie so verwenden können:

(cell.lbl_0.text, cell.lbl_1.text, cell.lbl_2.text, cell.lbl_3.text) = ("", "", "", "") 

Welche ein bisschen kürzer ist, aber nicht das, was Sie hatte gehofft, denn ich denke: -)

Verwandte Themen