【问题标题】:Hide Multiple UIButton in single button click在单个按钮单击中隐藏多个 UIButton
【发布时间】:2013-08-16 10:34:19
【问题描述】:

我的 xib 中有 5 个按钮,按钮 1 到 4 映射到

-(IBAction)btn1to4:(UIButton *)sender; 

按钮 5 映射到

-(IBAction)btnFive:(id)sender;

最初所有 4 个按钮都是隐藏的,只有按钮 5 是可见的,我需要的是,当我单击按钮 5 时,所有 4 个按钮都应该出现,当我再次单击按钮 5 时,它们应该消失。对于单个按钮,我可以在 Button 5 中将代码编写为 button1.hidden=NObutton2.hidden=NO 等。但是我的按钮 1 到 4 映射到单个 btn1to4 方法。我应该如何在我的 btnFive 方法中编写代码来一次隐藏/取消隐藏所有 4 个按钮?

【问题讨论】:

  • 当您说按钮 1 到 4 映射到 -(IBAction)btn1to4:(UIButton *)sender 时,这并不重要:它只是一个事件处理程序。您可以为您的按钮创建单独的IBOutlets,或创建一个IBOutletCollection - 这是在 Cocoa 中管理元素组的首选方式。

标签: ios objective-c uibutton


【解决方案1】:

将按钮 1 到 4 添加到界面构建器中的 IBOutletCollection。添加属性

@property (nonatomic, strong) IBOutletCollection(UIButton) NSArray *buttons1_4;

然后将按钮 1..4 拖到那里。 Here is an answer explaining how to do it step-by-step.

现在您可以使用循环操作该集合中的所有按钮,而不是单独引用它们:

-(void)flipButtonsVisibility:(UIButton*)sender {
    for (UIButton *btn in buttons1_4) {
        btn.hidden = !btn.hidden;
    }
}

【讨论】:

  • 除此之外,如果我必须相应地更改第 5 个按钮的标题,当我点击显示时,它的标题应该更改为隐藏,反之亦然。我应该如何进行? if(btn.hidden) sender.titleLabel.text=@"显示";似乎不起作用。
  • @Gamerlegend 查看this question,它解释了如何更改标题。
【解决方案2】:

给你的button5标签,比如

button5.tag = 101;

在你button5的IBAction参数里把id改成UIButton *,比如

-(IBAction)btnFive:(UIButton *)sender

并编写以下代码

-(IBAction)btnFive:(UIButton *)sender
{
    if(sender.tag == 101)
    {
      self.btn1.hidden = YES;
      self.btn2.hidden = YES;
      self.btn3.hidden = YES;
      self.btn4.hidden = YES;
      sender.tag = 102;
    }
    else
    {
      self.btn1.hidden = NO;
      self.btn2.hidden = NO;
      self.btn3.hidden = NO;
      self.btn4.hidden = NO;

      sender.tag = 101;
    }
}

【讨论】:

  • 没有单独的,btn1, btn2, btn3, btn4, jst单一方法btn1to4。所以 self.btn1to4 将不起作用。还有其他选择吗??
  • 什么意思没有个体,btn1, btn2, btn3, btn4 ??
【解决方案3】:

在您的 .h 文件中

int a;

.m

-(void)viewDidLoad
{
 a=0;
}

在您的按钮中单击

-(IBAction)btnFive:(id)sender


{
    if(a==0)
    {
      button1.hidden = YES;
      button2.hidden = YES;
      button3.hidden = YES;
      button4.hidden = YES;
      a = 1;

    }
    else
    {
      button1.hidden = NO;
      button2.hidden = NO;
      button3.hidden = NO;
      button4.hidden = NO;
      a = 0;
    }
}

【讨论】:

    【解决方案4】:

    在您的 -(IBAction)btnFive:(id)sender 中,首先检查任何一个按钮(从 1 到 4)隐藏属性并在条件下执行相反的操作。请在下面找到示例 -

    -(IBAction)btnFive:(id)sender {    
    if(btn4.hidden==false){
              btn1.hidden=true;
              btn2.hidden=true;
              btn3.hidden=true;
              btn5.hidden=true;
        }else{
             btn1.hidden=false;
             btn2.hidden=false;
             btn3.hidden=false;
             btn5.hidden=false;
        }
    }
    

    尝试编写更少的行代码并尝试编写有效的行。

    如果您需要更多帮助,请告诉我。如果你觉得这个答案合适,请投票给我。 万事如意

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 2011-12-10
      • 1970-01-01
      • 2012-10-28
      相关资源
      最近更新 更多