sayguh
sayguh

Reputation: 2550

Variable IBOutlet name for a UILabel?

Ugh, having some trouble here...

I have 4 display labels in Interface Builder set up as IBOutlets in the view controller.

I've set them up with these names label1, label2, label3, label4

I'm want to change the label text for a randomly selected label

I'm trying this...

In the header file I declare as a property:

@property (nonatomic retain) UILabel *myLabel;

And then in my implementation file I synthesize and I'm trying

myLabel = [UILabel valueForKey: [NSString stringWithFormat:@"label%d", randomInt]];

myLabel.text = @"bleh!";

The myLabel = [UILabel ... line is causing to crash. Any help? Thanks!

Upvotes: 0

Views: 1044

Answers (1)

Rob Napier
Rob Napier

Reputation: 299345

You have the right idea, but you should pass valueForKey: to self, not UILabel, assuming its self that owns these properties.

myLabel = [self valueForKey:[NSString stringWithFormat:@"label%d", randomInt]];

As a side note, this is probably better done with an IBOutletCollection. In Xcode 4, select all of the labels and drag them to the header file. This will generate an IBOutletCollection NSArray containing all the outlets. You can then pick a random index from that array. It is usually unfortunate that IBOutletCollection stores its outlets in a non-deterministic order, but for your case it should be fine.

Upvotes: 2

Related Questions