noob question as always.
I have ViewController that contains a vertical stackview. Inside the stack are labels and textfields (the label describes the text to be inputted into the textfield). Depending on what the user selects from a list of items in a table on a previous screen, I want to change which labels+textfields get displayed to the user.
I'd like to remove both in one go for simplicity. I've been able to remove a textfield+label from view using tags. But I can't have the same tag number assigned to both a label and textfield then remove them both from view at once. Currently removing a label and textfield at once looks like...
if let viewWithTag = self.view.viewWithTag(1) {
viewWithTag.removeFromSuperview()
}
if let viewWithTag = self.view.viewWithTag(2) {
viewWithTag.removeFromSuperview()
}
With quite a few label+textfields to work through this could get messy.
Next I looked at inserting a UIView into the stack and then adding my label+textfield into that view. Then I can assign a tag to the UIView and remove all at once, but the uiviews alignment inside the vertical stackview is a mess and I don't really know how to fix it. Doesn't seem like the right way to go?
Wonder if I need to stick the tag numbers into an array of some sort and create a function to simplify the remove with tag process?
Any help on how to approach appreciated.
The views in a
UIStackVieware already an indexed array, accessible via the stack view's.arrangedSubviewsproperty.So, suppose you have 8 label/field pairs, they will be indexed like this:
If you want to remove the 4th pair (Label 4 and Field 4), you can do this:
That removes "Label 4" (remember, array indexes are zero-based).
Now, "Field 4" is at
[6], so just call it again:That said, depending on what you're doing, you may find it easier to ADD your label/field pairs at runtime.
Something along these lines:
and we end up with this: