2017-03-19 2 views
0

Ich habe ein UIStackView-Objekt, dem ich ein UILabel als erste Unteransicht hinzugefügt habe. Hier ist, was mein Code wie folgt aussieht:So verweisen und ändern Sie Subview UILabel von übergeordneten UIStackView

func createStackView() -> UIStackView? { 
    var displayLabel = UILabel() 
    // Set properties of displayLabel 
    ... 
    let myStackView = UIStackView(arrangedSubviews: [displayLabel, stackViewRow1, stackViewRow2] 
    return myStackView 
} 

Jetzt möchte ich später einen Verweis auf das Displaylabel-Objekt erhalten, so kann ich ändern es Textfeld ist. Die einzige Art, wie ich dies tun konnte, war so etwas wie ein Hack:

var displayPanel = topStackView.arrangedSubviews[0] 
if let displayLabel = displayPanel as? UILabel { 
     displayLabel.text = "Ready" 
} 

Gibt es einen besseren Weg, dies zu tun?

Antwort

1

Shop ein Verweis auf das Etikett in einer Eigenschaft:

var displayLabel: UILabel? 

// then when you create the stack view 
self.displayLabel = displayLabel 

// to access it later 
if let displayLabel = displayLabel { 
    displayLabel.text = "Ready" 
} 
+0

Danke, das funktioniert gut für mich. – femibyte

1

Wenn displayLabelnicht Instanz variabel sein sollte, dann einen tag Wert-Einstellung für sie nützlich sein könnten:

Eine ganze Zahl, die Sie verwenden können Fenster in Ihrer Anwendung zu identifizieren.

Was können Sie tun:

// declaring a global constant for holding the label tag value 
let displayLabelTageValue = 101 

func createStackView() -> UIStackView? { 
    var displayLabel = UILabel() 
    // setting tag 
    displayLabel.tag = displayLabelTageValue 
    // Set properties of displayLabel 
    ... 
    let myStackView = UIStackView(arrangedSubviews: [displayLabel, stackViewRow1, stackViewRow2] 
     return myStackView 
} 

Und für identifizierte immer displayLabel Label:

if let displayLabel = view.viewWithTag(displayLabelTageValue) as? UILabel { 
    // displayLabel is wanted label! 
} else { 
    // make sure that the tag value is matched 
} 
0

Es hängt davon ab, was Ihre Ziele sind.

Wenn Sie den Text der Ansicht in Position 0 der Stapelansicht auf eine bestimmte Zeichenfolge festlegen möchten, ist der von Ihnen angegebene Code der richtige Weg.

Wenn Sie eine Beschriftung haben, die Sie unabhängig von ihrer Position in der Stapelansicht ändern können, sollten Sie einen Verweis darauf in einer Instanzvariable Ihres Ansichtscontrollers speichern, und dann können Sie ihren Text auf setzen jederzeit eine neue Zeichenfolge.

Verwandte Themen