如何隐藏我在for循环中分配的按钮?

时间:2013-11-25 06:28:57

标签: iphone for-loop uibutton hide

我在屏幕顶部创建了3个UIbuttons。点击每个按钮后,我在下面的每个按钮上都有5个按钮,背景图像不同。下面是我的第一个按钮(位于顶部)的代码,我在视图控制器中获得了5个图像。

-(IBAction) btnforimages1click:(id)sender {
    for (int a=0; a<5 ; a++) {    
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
        {
            buttonsforbundle1 = [[UIButton alloc]initWithFrame:CGRectMake(100*a,300 ,100 ,90 )];
            [buttonsforbundle1 addTarget:self action:@selector(btn4images1:) forControlEvents:UIControlEventTouchUpInside];
            buttonsforbundle1.tag = a;
            [buttonsforbundle1 setBackgroundImage:[UIImage imageNamed:[bundle1 objectAtIndex:a]] forState:UIControlStateNormal];
            [self.view addSubview:buttonsforbundle1];
        }
}

我也对其他两个按钮做同样的事情。现在我想要的是,当我点击我的前三个按钮

  • 我只想显示相关按钮(在for循环中创建)
  • 我想隐藏与其他最顶层按钮相关的其他按钮。

请建议我如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

您至少有三个选择:

1)按标签访问UI元素:

如果您可以设法在btnforimages1点击中发出唯一标记号,btnforimages2click,btnforimages3点击其他5个添加的UIButtons,那么您可以访问它们:

UIButton *button = (UIButton *)[self.view viewWithTag:99];
[button removeFromSuperview];

2)继续参考创建的按钮:

// in view.h
NSMutableArray *my_created_buttons;
...
// in view init
[[my_created_buttons alloc] init];
...
-(IBAction) btnforimages1click:(id)sender {
    for (UIButton *b in my_created_buttons {
        [b removeFromSuperview];
    }
    if([my_created_buttons count]) {
        [my_created_buttons removeAllObjects];
    }


    ... let buttonsforbundle1 local variable since we store current 5 button set in array
    UIButton *buttonsforbundle1;
    ... in your for loop add this after creating and adding to view
    [my_created_buttons addObject:buttonsforbundle1];
}

您可以进一步重构这些代码,例如。通过对其他方法进行可变阵列管理。

3)将其保存在Interface Builder

我认为这是最简单的选择,在Interface Builder中创建5个UIButton并为它们提供5个IBOutlet。然后在你的btnforimages1点击你可以例如:

-(IBAction) btnforimages1click:(id)sender {
    self.IBbutton1 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:0]] forState:UIControlStateNormal];
    self.IBbutton2 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:1]] forState:UIControlStateNormal];
    self.IBbutton3 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:2]] forState:UIControlStateNormal];
    self.IBbutton4 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:3]] forState:UIControlStateNormal];
    self.IBbutton5 setBackgroundImage[UIImage imageNamed:[bundle1 objectAtIndex:4]] forState:UIControlStateNormal];
}

所以你不要隐藏它们,只需改变背景图像。此外,您不必处理不同的touchUpInside事件,只使用一种方法,并且在一次单击方法中,您可以通过检查其标记来区分不同的单击UIButton(另外,您必须使用变量来检查哪个点击了3个顶级UIButton。