我的Objective C类包含属性:
@property (weak, nonatomic) IBOutlet UILabel *labelText1;
@property (weak, nonatomic) IBOutlet UILabel *labelText2;
@property (weak, nonatomic) IBOutlet UILabel *labelText3;
@property (weak, nonatomic) IBOutlet UILabel *labelText4;
@property (weak, nonatomic) IBOutlet UILabel *labelText5;
@property (weak, nonatomic) IBOutlet UILabel *labelText6;
有没有办法在代码中枚举它? 类似的东西:
for (int i = 1; i <= 6; i++)
{
theCell.labelText i.text = @"some value";
}
谢谢!
答案 0 :(得分:1)
您可以使用KVC访问这些属性。
NSArray *allProperties = @[@"labelText1", @"labelText2", @"labelText3", @"labelText4", @"labelText5", @"labelText6"];
for (NSString *aProperty in allProperties) {
UILabel *label = [theCell valueForKey:aProperty];
label.text = @"some value";
}
这会产生你想要的结果。无论如何,我建议你为这样的UI元素创建IBOutletCollection,或者仅为那些想要迭代的数组创建数组。
答案 1 :(得分:1)
您可以创建UILabel属性的IBOutletCollection:
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *myControllerLabels;
在storyboard或.xib文件中,从UILabel元素控制拖动到此属性。
然后在您的代码中,您可以执行以下操作:
[self.myControllerLabels enumerateObjectsUsingBlock:^(UILabel *label, NSUInteger idx, BOOL *stop) {
label.text = @"some value";
}];
答案 2 :(得分:0)
是的,但我不建议在实际应用中使用它。 Objective-C运行时非常开放:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/index.html
有许多方法可以为您提供属性。
答案 3 :(得分:0)
您可以通过调用@selector()
上的performSelector:withObject:afterDelay:
并传递theCell
作为对象来使用NSString
。
NSString *selectorName;
for (int i = 1; i <= 6; i++)
{
selectorName = [NSString stringWithFormat:"setLabelText%i", i];
[theCell performSelector:@selector(selectorName) withObject:@"some value"];
}