I am trying to create a simple translation program for iPhone and have drawn 5 labels and 5 text fields using Interface Builder in xcode. I have added the questions to an outlet collection of UILabels and the answers to an outlet collection of UITextView. This part all works great, i can enumerate the collections and get back the list of labels and answers. My problem is that what I was hoping I would get is:
Index Question # Answer #
1 1 1
2 2 2
3 3 3
etc. in an ordered sequence, instead I get:
1 1 2
2 3 1
3 2 3
etc. and its different every time I make an edit and recompile the program. How do I synch up a list of labels with text views in an outlet collection(s) so I can enumerate through them to check the right answer was provided for the question?
There are a few ways you could match up your labels and your text views. One easy way is using tags.
Every
UIViewhas an integertagproperty that you can use however you wish. You can set the tag in code, or in the View section of the Attributes inspector in your nib. You can also ask a view to search all its descendants (including itself) for a view with a particular tag, using theviewWithTag:method, but we won’t use that.Here’s what you do. In your nib, give each label a different tag. Let’s say you give label A a tag of 1, and label B a tag of 2, and so on. Give each text view the same tag as the corresponding label. So the text view that goes with label A also gets tag 1, and the text view that goes with label B also gets tag 2, and so on.
Then, in your
viewDidLoadmethod, you can just sort the outlet collections by tag. Let’s say the labels are in an outlet collection namedlabelsand the text views are in an outlet collection namedtextViews. Here’s how you sort them:Now the
labelsarray and thetextViewsarray are matched up, so that the label at index 0 oflabelsgoes with the text view at index 0 oftextViews, and so on.