2011-03-15 76 views
-1

我有5个按钮名为opt1,opt2,opt3等如果我想隐藏/显示/对他们做些什么,我可以创建一个简单的陈述,而不是做opt1 .hidden = YES,opt2.hidden ....?如果是这样,它会是什么样子?由于需要一些帮助清理我的代码

编辑:这是我试图清理代码:

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

有一个简单的发言中,我可以使用,将隐藏所有的人,而不必手动隐藏,因为唯一的区别每一个在他们的名字是最后的数字?它看起来并不像很多按钮,但我将不得不再多添加一些按钮,所以我宁愿不用20行代码来隐藏一堆按钮。

+3

我看不到要清理的代码。 – Shoban 2011-03-15 02:49:19

+0

需要更多信息,显示/隐藏它们的逻辑是什么。即如果你只是想隐藏,如果按钮显示(反之亦然),你可以做button.hidden =!button.hidden,这取决于你想要达到什么。 – Rog 2011-03-15 02:50:27

回答

4

你可以这样做。

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

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

该应用程序在for语句行上用SIGABRT崩溃。任何想法为什么? – Preston 2011-03-15 03:10:15

+0

没关系,我明白了。 – Preston 2011-03-15 03:18:49

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]; 
} 
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数组包含DB字段的名称。然后,您可以使用相同的名称在您的控制器中命名您的UI控件。然后,你需要的只是一个简单的for循环,也许一些是KindOfClass测试,将所有的控制数据移动到你的数据库中。这是我的一个项目的一个例子。

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管理对象。如果您需要各种数据类型,您需要具有创意。如果数据库在数据类型方面很复杂以控制映射,那么只需将其写入强力文件可能会更好。