我在视图中添加了10个按钮(示例视图名称为“menuView”),现在我想删除第2,第3,第4个按钮的背景图像。我写了这样的代码
for(id btn in [menuView subViews]){
[btn setBackgroundImage:nil forState:UIControlStateNormal];
}
这段代码的问题是,它删除了所有10个按钮的backGroundimage,但我需要为第2,第3和第4个按钮设置nil
答案 0 :(得分:11)
如果您为添加的按钮创建标记,则可以对其进行过滤。
for(UIButton *btn in [menuView subViews]){
if (btn.tag == 2 || btn.tag == 3 || btn.tag == 4) {
[btn setBackgroundImage:nil forState:UIControlStateNormal];
}
}
当然,您需要确保menuView中没有其他可以共享相同标记的视图。因此,选择是使标签变大,唯一值或检查它们实际上是UIButton。假设menuView的唯一子视图是UIButtons,我编辑了这个。枚举UIButtons不会导致编译器警告tag
不是NSObject的属性。
UIButton
是UIControl
的子类,它是UIView
的子类。 UIView
具有tag
属性,因此UIButton
会继承此属性。查看正在使用的类的文档很有用,并继续使用层次结构来查看是否存在对您需要执行的操作有用的属性或方法。
答案 1 :(得分:2)
只是为了扩展我的评论。
使用IBOutletCollection,您可以将数组指向nib中的许多对象。你这样声明(在实现中合成):
@property (nonatomic, retain) IBOutletCollection(UIButton) NSArray *threeButtons;
这告诉IB它是UIButton元素的集合。在IB中,通过控制将其拖动到按钮,将其连接到要删除背景图像的三个按钮。完成后,阵列将包含您连接的那些按钮,您可以这样循环:
for (UIButton *button in self.threeButtons) {
[button setBackgroundImage:nil forState:UIControlStateNormal];
}
同样,可以在以下网址找到更详细解释的链接:http://bobmccune.com/2011/01/31/using-ios-4s-iboutletcollection
答案 2 :(得分:1)
创建按钮时,请尝试使用“tag”属性。然后,当您将背景设置为nil时,您可以检查btn.tag == 2,btn.tag == 3或btn.tag == 4.
答案 3 :(得分:1)
将这些按钮添加到菜单视图时,您可以为按钮指定1到10个标签。现在借助标签,我们可以决定如何处理按钮。
答案 4 :(得分:0)
首先,您是否使用Interface Builder放置按钮?
如果是这样,我建议为每个按钮放置编号标签,然后您可以使用以下内容查找相应的按钮并删除背景图像。
for(UIButton *buttonname in [yourView subViews]){
if (buttonname.tag == 2 || buttonname.tag == 3 || buttonname.tag == 4) {
[buttonname setBackgroundImage:nil forState:UIControlStateNormal];
}
}
如果您是以编程方式和顺序创建它们,我建议将按钮放在一个数组中,然后使用“objectAtIndex”删除按钮的背景。