隐藏以编程方式为标签创建的 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的主要内容,如果未能解决你的问题,请参考以下文章