将多个属性应用于多个对象

时间:2012-04-07 22:26:23

标签: iphone ios5 sdk

我正在编写一个iOS应用程序,我有一个问题可以让阅读变得更容易。

例如,我有很多东西需要隐藏,所以我这样做:     mytext1.hidden = YES;     mytext2.hidden = YES;     mytext3.hidden = YES; ...

有没有办法写这个:     (mytext1,mytext2,mytext3).hidden = YES;

由于

2 个答案:

答案 0 :(得分:2)

您可以使用如下选择器迭代数组:

[theArray makeObjectsPerformSelector:@selector(methodName)];

...并且存在一个采用单个对象参数的变体。但是,这不会处理标量类型,因此要设置hidden = YES,您可以使用块进行枚举:

[theArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    (UITextField *)obj.hidden = YES;
}];

如果你的口味太过冗长,你可以在数组类中添加方法,例如,假设一组控件。这些只是隐藏枚举,但调用者可以这么简单:

[myArrayOfControls hidden:YES];

容易上眼,对吗?您可以通过创建自己的NSArray方法自定义类别来实现此目的:

// in Array+UIControlEnumeration.m

@implementation NSArray (UIControlEnumeration)

- (void)hidden:(BOOL)hidden {

    for (UIControl *control in self) {
        control.hidden = hidden;
    }
}

答案 1 :(得分:1)

不,Objective-C中不存在这样的语法。你最好将它们全部放在一个数组中,你将它作为一个合成属性添加并循环遍历它们:

for (UITextField *textField in self.myArrayOfTextFields) {
    [textField setHidden:YES];
}