【问题标题】:How to hide buttons which I had allocated in for loop?如何隐藏我在 for 循环中分配的按钮?
【发布时间】:2013-12-09 18:24:06
【问题描述】:

我在屏幕顶部创建了 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];
        }
}

我也对其他两个按钮做同样的事情。现在我想要的是,当我单击前 3 个按钮中的任何一个时

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

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

【问题讨论】:

    标签: iphone for-loop uibutton hide


    【解决方案1】:

    您至少有三个选择:

    1) 通过标签访问 UI 元素:

    如果您可以设法在您的 btnforimages1click、btnforimages2click、btnforimages3click 中为您添加的其他 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。然后在你的 btnforimages1click 你可以例如:

    -(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 被点击)。

    【讨论】:

    • 我还必须将这些背景图像传递给另一个视图控制器,我通过 nsuserdefaults 完成。
    • Dudethanx 为您提供指导,但我的问题已通过 NSDictionary 得到解决。
    • 好的,那么您可以在这里回答并接受它,以随时了解其他 Stackoverflow 读者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2013-09-23
    • 1970-01-01
    • 2020-05-19
    相关资源
    最近更新 更多