【问题标题】:Connecting Multiple Buttons to one action?将多个按钮连接到一个动作?
【发布时间】:2010-04-07 02:09:36
【问题描述】:

我的应用中有多个 UIButton。我也使用界面生成器。在我的 .h 中,我有类似的东西

  IBOutlet UIButton *button1;
    IBOutlet UIButton *button2;
    IBOutlet UIButton *button3;
    - (IBAction)buttonPressed;

然后在我的 m 我想做这样的事情

- (IBAction)buttonPressed {


if (theButtonIpressed == button1) 

{

// do something if 

}

}

问题是我没有名为“theButtonIpressed”的东西,所以我不能这样做。我的 if 语句应该是什么样的?我不想为每个按钮制作一个 -(IBAction) 。有什么我可以确定按下哪个按钮的吗?谢谢!

谢谢,

-大卫

【问题讨论】:

  • @David - 为什么没有其他IBActions?使用多种方法,您的代码将更易于维护。
  • 如果他们都做非常相似的事情,那就不行了。那会导致很多重复的代码,对吧?

标签: iphone objective-c sdk


【解决方案1】:

您还可以在界面构建器中为每个按钮设置标签属性,然后使用它来找出按下了哪个按钮......这也意味着您不需要定义所有按钮引用(UIButton)并在代码中跟踪它们......

- (void) doSomething:(id)sender {

    int buttonPressed = [sender tag];

    switch (buttonPressed) {
       case 0:....
       // etc
     }
}

【讨论】:

    【解决方案2】:

    将您的- (IBAction)buttonPressed 定义为:

    - (IBAction)buttonPressed: (UIButton *) buttonIpressed
    

    然后就可以了。

    【讨论】:

      【解决方案3】:

      - (IBAction)buttonPressed:(UIButton*)button

      但是,如果您为每个按钮做不同的事情,那么正确的方法是创建单独的 IBAction。

      【讨论】:

        【解决方案4】:

        您可以为每个按钮使用标签值

         IBOutlet UIButton *button1;
         button1.tag = 100;
         IBOutlet UIButton *button2; 
         button2.tag = 200;
         IBOutlet UIButton *button3;
         button3.tag = 300;
        
         - (IBAction)buttonPressed:(id)sender
        {
           if ([sender tag]==100) 
           {
             NSLOG("button1");
           }
           else if([sender tag]==200)
           {
             NSLOG("button2");
           }
           else {
             NSLOG("button3");
           }
        
        }
        

        【讨论】:

          猜你喜欢
          • 2016-01-11
          • 1970-01-01
          • 2022-01-26
          • 2012-12-12
          • 2019-01-26
          • 1970-01-01
          • 1970-01-01
          • 2018-12-13
          • 1970-01-01
          相关资源
          最近更新 更多