Zugriff auf Elemente in StackView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zugriff auf Elemente in StackView

    Ich möchte auf die, programmatisch erzeugten, Elemente in einem StackView zugreifen. Ich habe einen übergeordneten Stackview, welchen ich mit weiteren StackViews "befülle" diese enthalten wiederum ein Label, einen Switch und ein Textfeld. Jetzt ist meine Frage: Wie kann ich auf die Elemente in den verschachtelten Stackviews zugreifen, um zum Beispiel den Text der Felder auszulesen oder den Zustand der Switch abzufragen.

    Hier ist mein Code:
    der Stackview "stack" stammt aus dem Storyboard und wurde mit einem Outlet verbunden

    Quellcode

    1. for index in arrayx {
    2. let stacki = UIStackView()
    3. stacki.axis = .horizontal
    4. stacki.distribution = .fillEqually
    5. stacki.spacing = 10
    6. stacki.translatesAutoresizingMaskIntoConstraints = false
    7. let lable = UILabel()
    8. lable.text = index
    9. stacki.addArrangedSubview(lable)
    10. let swi = UISwitch()
    11. swi.setOn(false, animated: false)
    12. stacki.addArrangedSubview(swi)
    13. let text = UITextView()
    14. let color = UIColor(red: 186/255, green: 186/255, blue: 186/255, alpha: 1.0).cgColor
    15. text.layer.borderColor = color
    16. text.layer.borderWidth = 0.5
    17. text.layer.cornerRadius = 5
    18. stacki.addArrangedSubview(text)
    19. stack.addArrangedSubview(stacki)
    20. }
    Alles anzeigen
    Viele Grüße
    Felix
  • Du kannst den einzelnen Controls ein tag verpassen, also z.B.

    Quellcode

    1. ...
    2. let lable = UILabel()
    3. label.tag = arrayx.firstIndex(of:index) * 100 + 1
    4. ...
    5. swi.tag = label.tag + 1
    6. ...
    7. text.tag = label.tag + 2
    8. ...

    Somit kannst Du später z.B. per

    Quellcode

    1. for index in arrayx {
    2. if let switch = stack.viewWithTag(arrayx.firstIndex(of:index) * 100 + 2) as? UISwitch, let textView = stack.viewWithTag(arrayx.firstIndex(of:index) * 100 + 3) as? UITextView {
    3. print("\(index), switch:\(switch.isOn()), text:\(textView.text)"
    4. }
    5. }
    auf den Switch und Text passend zum index zugreifen.

    Alternativ würde es auch mit gleichen tags für UILabel, UISwitch und UITextView funktionieren, also z.B.

    Quellcode

    1. ...
    2. let lable = UILabel()
    3. lable.tag = 1
    4. ...
    5. swi.tag = 2
    6. ...
    7. text.tag = 3
    8. ...

    Der Zugriff erfolgt dann über die Sub(Stack)Views von stack:

    Quellcode

    1. for stacki in stack.arrangedSubviews {
    2. if let label = stacki.viewWithTag(1) as? UILabel, let switch = stacki.viewWithTag(2) as? UISwitch, let textView = stacki.viewWithTag(3) as? UITextView {
    3. print("\(label.text), switch:\(switch.isOn()), text:\(textView.text)"
    4. }
    5. }

    In Deinem Fall würde sich evtl. die Verwendung eines UITableView oder UICollectionView anbieten.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von MCDan ()