5

目前,我使用 for 循环以编程方式创建了 14 个按钮,代码如下:

int buttonCount = 14;
for (int i=0; i< buttonCount; i++) {             
    
//Create titleString from array object
    NSString *stringFromInt = [NSString stringWithFormat:@"%@",[arrayForRound objectAtIndex:i]];
        

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        
        [button addTarget:self
                   action:@selector(buttonSelected:)
         forControlEvents:UIControlEventTouchDown];

        [button setTitle:stringFromInt forState:UIControlStateNormal];

        button.titleLabel.font = [UIFont fontWithName:@"helvetica" size:19];
        button.tag = i;
        
        [self.view addSubview:button];
}

这非常适合创建按钮,然后我可以使用所选按钮的值填充答案框:

-(void)buttonSelected: (UIButton *)sender
{
[_buttonOne setTitle:sender.titleLabel.text forState:UIControlStateNormal];
}

但是,在填充按钮后,我想将其从屏幕上删除。如果我调用 button.hidden 它只是隐藏以编程方式创建的最后一个按钮。我知道 button.tag 并尝试使用它,但感觉我几乎需要做类似的事情:

//Hide button for tag (i know this is incorrect syntax)
button for buttonTag: 3 setHidden;

有没有类似的东西或这样做的方法?

更新

我试图隐藏的按钮是以编程方式创建的。所以我希望 _buttonOne 采用创建按钮的标题(让我们称之为 letterButton),然后从视图中隐藏 letterButton,

UIButton *yourBtn = (UIButton *)[self.button viewWithTag:3];
[yourBtn setHidden:YES];
(code posted by Oh Seung Kwon)

此代码完美运行,但它隐藏了错误的按钮集。(隐藏 _buttonOne 而不是 letterButton)。

我想知道在 nib 中创建 12 个按钮并手动命名它们是否会更好......永远不会多或少 12 个。

4

3 回答 3

9

当您的按钮被点击时,您可以hidden在 action 方法的sender参数上设置属性,即实际被点击的按钮。这将隐藏被点击的按钮。

- (void)buttonSelected:(UIButton *)sender {
   [_buttonOne setTitle:sender.titleLabel.text forState:UIControlStateNormal];
   [sender setHidden:YES];
}

如果您打算检索带有 标记的按钮,则3可以改用以下代码:

[[self.view viewWithTag:3] setHidden:YES];

我不建议您使用该tag属性 - 您应该使用 Interface Builder 和 anIBOutletCollection来代替。

于 2013-03-05T02:05:03.643 回答
2

像这样

UIButton *yourBtn = (UIButton *)[self.view viewWithTag:3];
[yourBtn setHidden:YES];
于 2013-03-05T02:04:44.733 回答
1

您可以使用此消息按标签获取视图。

[self.view viewWithTag:3];

我们总是用宏来具体标记,就像

#define kFirstButtonTag (100)

或使用

#define kButtonBeginTag (100)

然后使用宏来获取标签。

并且使用特殊编号 - 始终使用案例 0、1 或 2,以特殊编号开始您的标签可以避免一些问题

于 2013-03-05T03:08:12.953 回答