需要一些帮助来清理我的一些代码

时间:2011-03-15 02:47:03

标签: iphone objective-c

我有5个名为opt1,opt2,opt3等的按钮。如果我想隐藏/显示/对他们做某事,我可以创建一个简单的for语句而不是opt1.hidden = YES,opt2.hidden .. ..?如果是这样,它会是什么样子?感谢

编辑:这是我要清理的代码:

opt1.hidden = NO;
opt2.hidden = NO;
opt3.hidden = NO;
opt4.hidden = NO;
opt5.hidden = NO;

是否有一个简单的for语句我可以使用它隐藏所有这些语句而不必手动隐藏每个语句,因为它们名称的唯一区别是最后的数字?它似乎不是很多按钮,但我将不得不尽快添加更多,所以我宁愿没有20行代码只是为了隐藏一堆按钮。

3 个答案:

答案 0 :(得分:4)

你可以这样做。

NSArray *myButtons = [NSArray arrayWithObjects:b1, b2, b3, b4, nil];

for (UIButton *button in myButtons)
{
    button.hidden = YES;
}

答案 1 :(得分:1)

大卫的建议是一个很好的建议,如果你知道并指向所有按钮。

另一种方法是循环浏览所有UIView子视图并在找到它们时隐藏按钮:

for (id subview in self.view)
{
    if ([subview isKindOfClass:[UIButton class]])
        [(UIButton*)subview setHidden:YES];
}

如果您想要选择隐藏的按钮,只需在创建时添加特定标签(即button1.tag = 999)并使用:

for (id subview in self.view)
{
    if ([subview isKindOfClass:[UIButton class]] && subview.tag == 999)
        [(UIButton*)subview setHidden:YES];
}

答案 2 :(得分:0)

大卫的回答可能是最好的,我会如何为少数控件做到这一点。你也可以使用KVC。

NSArray *myButtons = [NSArray arrayWithObjects:@"b1", @"b2", @"b3", @"b4", nil];

for (NSString *str in myButtons)
{
    id cont = [self valueForKey:key] ;
    if ([cont isKindOfClass:[UIButton class]]) {
        [cont setHidden:YES] ;
    }
}

我向您展示此方法的原因是它可用于在数据库和控件之间创建“绑定”。想象一下,如果myButtons数组包含数据库字段的名称。然后,您可以使用相同的名称在控制器中命名UI控件。然后你需要的只是一个简单的for循环,也许是一些isKindOfClass测试,将所有控制数据移动到你的数据库中。以下是我的一个项目的示例。

NSArray *fn = [AOSConfig sharedInstance].fieldNames ;
for (NSString* name in fn) {
    @try {
        id uifield = [self valueForKey:name] ;
        if ([cont isKindOfClass:[UITextField class]]) {
            [aosShotData setValue:[uifield valueForKey:@"text"] forKey:name]    
        }
    }
    @catch(NSException *e) {
    }
}

这就是将所有文本数据保存到CoreData托管对象。如果您需要各种数据类型,则需要获得创意。如果数据库在控制映射的数据类型方面很复杂,那么只需将它写成暴力就好了。