Iphone 如何删除按钮的背景图像

Iphone 如何删除按钮的背景图像,iphone,ipad,Iphone,Ipad,我在一个视图中添加了10个按钮(示例视图名为“menuView”),现在我想删除第2、第3、第4个按钮的背景图像。我这样写代码 for(id btn in [menuView subViews]){ [btn setBackgroundImage:nil forState:UIControlStateNormal]; } 此代码的问题是,它正在删除所有10个按钮的背景图像,但我需要为第2、第3和第4个按钮设置nil,创建按钮时,请尝试使用“tag”属性。然后,当您将背景设置

我在一个视图中添加了10个按钮(示例视图名为“menuView”),现在我想删除第2、第3、第4个按钮的背景图像。我这样写代码

for(id btn in [menuView subViews]){

       [btn setBackgroundImage:nil forState:UIControlStateNormal];

 }

此代码的问题是,它正在删除所有10个按钮的背景图像,但我需要为第2、第3和第4个按钮设置
nil
,创建按钮时,请尝试使用“tag”属性。然后,当您将背景设置为nil时,您可以检查btn.tag==2、btn.tag==3或btn.tag==4。

将按钮添加到菜单视图时,您可以将标签分配给1到10之间的按钮。现在,在标签的帮助下,我们可以决定如何处理按钮。

如果您为添加的按钮创建标签,则可以对其进行过滤

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不会导致编译器警告
标记
不是NSObject的属性


UIButton
UIControl
的子类,它是
UIView
的子类
ui视图
具有
标记
属性,因此
ui按钮
继承此属性。查看您正在使用的类的文档,并继续向上查看层次结构,以查看是否有属性或方法对您需要执行的操作有用。

仅对我的评论进行扩展

使用IBOutletCollection,可以将数组指向nib中的许多对象。您这样声明(在实现中):

这对IB来说是UIButton元素的集合。在IB中,通过将控件从其拖动到按钮,将其连接到要删除背景图像的三个按钮。完成后,阵列将包含您连接的按钮,您可以这样循环:

for (UIButton *button in self.threeButtons) {
    [button setBackgroundImage:nil forState:UIControlStateNormal];
}

同样,可以在以下位置找到更详细说明的链接:

首先,您是否使用Interface Builder放置按钮

如果是这样的话,我建议为每个按钮放置编号标签,然后您可以使用以下类似的方法找到合适的按钮并删除背景图像

 for(UIButton *buttonname in [yourView subViews]){
        if (buttonname.tag == 2 || buttonname.tag == 3 || buttonname.tag == 4) {
            [buttonname setBackgroundImage:nil forState:UIControlStateNormal];
        }
    }

如果您是以编程方式按顺序创建它们,我建议在创建按钮时将其放置在一个数组中,只需使用“objectAtIndex”删除按钮的背景即可,如果始终使用相同的3个按钮,则可以使用
IBOutletCollection
将数组指向nib中的多个对象。将它指向要删除背景图像的三个按钮,并使用类似于上面@Abizern所示的代码循环浏览IBOutletCollection。我觉得这种方法比使用标签更干净,我觉得这有点武断。这里有一个相当不错的指南:我刚刚回来看了自己的答案,我为自己感到羞愧。现在我不会这么做——我只会使用一个IBOutletCollection,甚至保留对这三个视图的引用并再次检查它们,而不是使用标记。
 for(UIButton *buttonname in [yourView subViews]){
        if (buttonname.tag == 2 || buttonname.tag == 3 || buttonname.tag == 4) {
            [buttonname setBackgroundImage:nil forState:UIControlStateNormal];
        }
    }