目标C:有没有在代码中枚举属性的方法?

时间:2015-01-26 18:17:01

标签: ios objective-c properties

我的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";
}

谢谢!

4 个答案:

答案 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"];
}