如何在单个方法中处理Button的多个ControlEvents?

时间:2016-03-11 07:20:36

标签: ios iphone

我有一个按钮,

按钮触摸我必须处理多个控件事件[例如,UITouchupinside,UITouchupoutside等] 根据事件触发不同的操作。

目前我正在使用不同的方法处理此问题。如下所示

        my $solr;
        eval {
            $solr = WebService::Solr->new( SOLR )
        };

         if (@$) {
            print $IN->header;
            print "FOO: @$";
            exit;
         }

但我不想为不同的事件调用不同的方法。我可以使用单一方法来处理所有控件事件。 像

- (IBAction)holdDown:(id)sender {
    NSLog(@"Hold down");
}
- (IBAction)released:(id)sender {

    NSLog(@“Touch up inside”);
}
- (IBAction)touchUpOutside:(id)sender {
    NSLog(@"touchUpOutside");
}

上述方法适用上述方法。但我想用单一方法识别不同的控件,如TouchUpInside,TouchUpOutside和TouchDown等....  - (IBAction)buttonAction:(id)sender { // here i want to identify which control event it is nslog( @"touchupinside"); //When fier call this nslog( @"touchupoutside"); // When fier call this }

4 个答案:

答案 0 :(得分:2)

以简单的方式,

只需将标记设置为按钮

即可

为下面图片中的所有按钮选择一个操作,

enter image description here

并使用标记

访问所有按钮
- (IBAction)buttonAction:(UIButton *)sender {

    if (sender.tag==1) {
        NSLog(@"button 1");
    }
  else  if (sender.tag==2) {
      NSLog(@"button 2");
    }
   else if (sender.tag==3) {
       NSLog(@"button 3");
    }
}

编辑1: - 如果您想通过一种方法访问所有事件状态,则可以使用 UIControllallevent 进行访问。

检查以下代码: -

- (IBAction)buttonAction:(UIButton *)sender {

    if (sender.tag==1) {
        NSLog(@"button 1");
         if (sender.allControlEvents)
        {
            if (sender.allControlEvents==UIControlEventTouchUpInside) {
                NSLog(@"Touchup inside");
            }
            else if (sender.allControlEvents==UIControlEventTouchUpOutside)
            {
                NSLog(@"Touchup Uoutside");
            }
            else if (sender.allControlEvents==UIControlEventValueChanged)
            {
                NSLog(@"EventValueChanged");

            }
            else if (sender.allControlEvents==UIControlEventTouchDragInside)
            {
                NSLog(@"TouchDragInside");

            }



        }

    }
  else  if (sender.tag==2) {
      NSLog(@"button 2");
    }
   else if (sender.tag==3) {
       NSLog(@"button 3");
    }
}

您将以这种方式访问​​所有活动。

enter image description here 我希望这些信息对您有所帮助

答案 1 :(得分:0)

您只需创建一个接受按钮以及事件的方法,如下所示:

- (IBAction)newMethod:(UIButton *)sender forEvent:(UIEvent *)event

UIButton操作会根据方法签名传递参数。使用该事件可以找出触发该方法的事件。将此方法作为目标选择器添加到按钮

[button addTarget:self action:@selector(newMethod:forEvent:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside|UIControlEventTouchDown]

从IB中,您需要为要连接的每个事件拖动并连接到此方法。

答案 2 :(得分:-1)

定义只有一种方法,并且在发送事件中,在您可以调用该方法的所有事件中都传递相同的方法(ctrl + drag)。

答案 3 :(得分:-2)

您可以按住Ctrl并将多个动作拖动到同一个方法,在该方法中,您可以检查收到的事件类型并相应地执行操作。