Ios 如何在单个方法中处理按钮的多个ControlEvents?

Ios 如何在单个方法中处理按钮的多个ControlEvents?,ios,iphone,Ios,Iphone,我有一个按钮 在触摸按钮时,我必须处理多个控制事件[例如,UITouchupinside、UITouchupoutside等],根据事件触发不同的操作 目前我正在用不同的方法处理这个问题。如下 - (IBAction)holdDown:(id)sender { NSLog(@"Hold down"); } - (IBAction)released:(id)sender { NSLog(@“Touch up inside”); } - (IBAction)touchUpOutsi

我有一个按钮

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

目前我正在用不同的方法处理这个问题。如下

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

    NSLog(@“Touch up inside”);
}
- (IBAction)touchUpOutside:(id)sender {
    NSLog(@"touchUpOutside");
}
但是我不想为不同的事件调用不同的方法。我可以使用单个方法来处理所有控制事件吗。 像

上述要求与上述方法配合良好。但我想确定不同的控制事件,如触地内、触地外和触地等。。。。单一方法
-IBActionbuttonAction:idsender。

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

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

只定义一个方法,在发送事件中,在您可以调用该方法的所有事件中,通过相同的方法ctrl+drag。

只定义一个方法,在发送事件中,在您可以调用该方法的所有事件中,通过相同的方法ctrl+drag。

只需将标签设置为按钮

并为下图中的所有按钮签入选择一个操作

并访问所有带标签的按钮

- (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:-如果要在一个方法中访问所有事件状态,则可以使用uicontrolLalEvent访问

检查以下代码:-

- (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");
    }
}
您将通过这种方式访问所有事件

我希望这些信息能以简单的方式对您有所帮助

只需将标签设置为按钮

并为下图中的所有按钮签入选择一个操作

并访问所有带标签的按钮

- (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:-如果要在一个方法中访问所有事件状态,则可以使用uicontrolLalEvent访问

检查以下代码:-

- (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");
    }
}
您将通过这种方式访问所有事件


我希望这些信息对您有所帮助

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

- (IBAction)newMethod:(UIButton *)sender forEvent:(UIEvent *)event
UIButton操作根据方法签名向您传递参数。使用事件找出触发该方法的事件。将此方法作为目标选择器添加到按钮

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

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

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

- (IBAction)newMethod:(UIButton *)sender forEvent:(UIEvent *)event
UIButton操作根据方法签名向您传递参数。使用事件找出触发该方法的事件。将此方法作为目标选择器添加到按钮

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


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

我同意我忘记了请检查编辑的答案。我同意我忘记了请检查编辑的答案。对不起,您能详细说明吗?甚至意味着你想在一个动作中检查3个按钮的事件状态?不,我只有一个按钮。我必须一次处理不同的事件method@ReddyBasha好的,我明白你的问题了。请检查编辑后的答案。@ReddyBasha您的问题很有价值,但您没有解释清楚。我已经编辑了你的问题。请检查一下。如果您需要任何编辑,请添加。谢谢您编辑此问题。我正在实施你的建议,我会让你知道一旦我做了。对不起,你能详细说明吗?甚至意味着你想在一个动作中检查3个按钮的事件状态?不,我只有一个按钮。我必须一次处理不同的事件method@ReddyBasha好的,我明白你的问题了。请检查编辑后的答案。@ReddyBasha您的问题很有价值,但您没有解释清楚。我已经编辑了你的问题。请检查一下。如果您需要任何编辑,请添加。谢谢您编辑此问题。我正在实施你的建议,一旦我完成了,我会让你知道。如何使用你建议的方法?。我尝试过,但没有luckI认为您可以将其用作[按钮添加目标:自我操作:@selectornewMethod:forEvent:forControlEvents:UIControlEventTouchUpInside]。如果按钮在IB中,您也可以拖动并选择该方法。该方法仅在触摸右侧时响应。如果我想在同一种方法上识别不同的事件,比如TouchUpOutSide,我必须做的是。我是通过IB连接的,就像你说的那样。但是没有运气。您是否尝试从IB连接并识别控制事件在.m文件中创建方法,并从IB pull string中的按钮从每个事件中创建方法,并将其连接到相同的方法。这会有用的。如何使用你建议的方法?。我尝试过,但没有luckI认为您可以将其用作[按钮添加目标:自我操作:@selectornewMethod:forEvent:forControlEvents:UIControlEventTouchUpInside]。如果按钮在IB中,您也可以拖动并选择该方法。该方法仅在触摸右侧时响应。如果我想用同一种方法识别不同的事件,比如TouchUpOutSide,我必须做什么
通过IB连接就像你说的那样。但是没有运气。您是否尝试从IB连接并识别控制事件在.m文件中创建方法,并从IB pull string中的按钮从每个事件中创建方法,并将其连接到相同的方法。这会奏效的。