我有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行代码只是为了隐藏一堆按钮。
答案 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托管对象。如果您需要各种数据类型,则需要获得创意。如果数据库在控制映射的数据类型方面很复杂,那么只需将它写成暴力就好了。