我有一个项目,其中有64个按钮,您必须单击某些按钮,然后单击“完成”。如果你点击了正确的那些,你会获得一些积分,然后需要消失。 我让用户通过发送者setSelected:TRUE来跟踪按下哪些按钮。 第一位工作正常,但我希望能够隐藏用户点击“完成”时选择的按钮。
我目前的想法是: - 我在Actionscript中用来做同样的事情是
for(i = 1; i ++; i <65){
if(getProperty(“b”+ i,_ visible)== true){do blah blah blah}}
我真的真的希望在目标C中有明显的等价物做同样的事情吗?
我绝对不希望必须通过所有64个按钮并输入if([b1 isSelected == TRUE]等...
我不能只使用发件人,因为它可能是我之前选择的几个我需要访问的按钮。
编辑 - 现在是用户按下64个按钮之一时调用的代码。
-(IBAction) pressed:(id)sender {
UIButton *button = (UIButton *)sender;
if ([sender isSelected] ==FALSE) {
[sender setSelected:TRUE];
}
else {
[sender setSelected:FALSE];
}
if ([myArray containsObject:sender])
{
[myArray removeObject:sender];
}
else {
[myArray addObject:sender];
}
}
当他们按下“完成”按钮时会调用它。
- (IBAction)checkTotal:(id)sender {
if (total == [(totaltxt.text) intValue]) {
score += 1;
scoretxt.text = [NSString stringWithFormat:@"%i", score];
for (UIButton *b in myArray)
{
[b setHidden:TRUE];
}
[myArray removeAllObjects];
}
else {
// some indication that they pressed the button but were wrong.
}
}
遗憾的是,它仍然不会隐藏按钮 如果我将其更改为[n1 setHidden:TRUE]以隐藏按钮上方的匹配文本框,但它不会隐藏甚至特定按钮-eg- [b1 setHidden:TRUE],更不用说我的数组中的所有按钮了。 AAAAAAAARGH !!!! 有什么想法吗?
答案 0 :(得分:0)
如果您不想遍历所有按钮,那么如何在数组中存储对按钮的引用然后只是遍历该数组并在使用点击完成后清除它?
-(void)click:(id)sender
{
if([myArray containsObject:sender])
[myArray removeObject:sender];
else
[myArray addObject:sender];
}
-(void)doneClicked:(id)sender
{
for(UIButton *b in myArray)
{
[b setHidden:TRUE];
}
[myArray removeAllObjects]; //whateverr the method is i dont remember it off the top of my head
}
答案 1 :(得分:0)
尝试[b setAlpha:0.0];
答案 2 :(得分:0)
创建按钮时设置标记,并将标记索引存储在数组中。
-(IBAction) pressed:(id)sender {
}
by sender.tag
然后最后运行循环隐藏所有对象 并再次运行循环以取消隐藏对象(如果它存在于数组中)。
答案 3 :(得分:0)
您可以迭代视图的子视图,并检查子视图是否为按钮:
for (UIView *view in self.view.subviews)
{
if ([view isKindOfClass: [UIButton class]])
{
// Do processing here
// For instance:
if ((UIButton *)view).isSelected)
view.hidden = YES;
}
}