隐藏以编程方式为标签创建的 UIButton

Posted

技术标签:

【中文标题】隐藏以编程方式为标签创建的 UIButton【英文标题】:Hide programmatically created UIButton for tag 【发布时间】:2013-03-05 01:56:18 【问题描述】:

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

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 个。

【问题讨论】:

【参考方案1】:

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

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

如果您要检索带有3 标签的按钮,您可以改用以下代码:

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

我不建议您使用 tag 属性 - 您应该使用 Interface Builder 和 IBOutletCollection

【讨论】:

嗨,Jacob,感谢您的回复,我在使用 for 循环实现 IBOutletCollection 时遇到了一点麻烦。你能否给我更多关于这方面的信息,或者我应该开始另一个问题吗?再次感谢 我最终使用了 self.view 标签,我遇到的问题是标签干扰了按钮,所以我只是将 button.tag 设置为 i+10。这似乎清除了一切,谢谢【参考方案2】:

这样

UIButton *yourBtn = (UIButton *)[self.view viewWithTag:3];
[yourBtn setHidden:YES];

【讨论】:

嘿哦,这似乎引发了一些错误,它也删除了错误的按钮,所以感谢您的回答,但我想我会尝试使用 Outlet Collection。 T 抱歉,这段代码确实有效!但这对于我想要实现的目标来说并不完全正确,我已经更新了我的问题以反映这一点 对不起,我现在才看到你的回复。 我认为你得到了更好的答案。问候【参考方案3】:

您可以使用此消息通过标记获取视图。

[self.view viewWithTag:3];

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

#define kFirstButtonTag (100)

或使用

#define kButtonBeginTag (100)

然后使用宏获取标签。

并且在一个特殊的数字中 - 总是使用案例 0、1 或 2,以一个特殊的数字开始你的标签可以避免一些问题

【讨论】:

以上是关于隐藏以编程方式为标签创建的 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式为 ViewController 创建标签栏

无法隐藏以编程方式创建的 UIButton

以编程方式创建的 UITextField 隐藏了其他控件

Swift 3:不能以编程方式在 Collectionview 标题上正确创建标签?

隐藏以编程方式创建的自动完成 UITableView

在 Swift 中以编程方式隐藏 TextFields?