我有一个按钮,
按钮触摸我必须处理多个控件事件[例如,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
}
。
答案 0 :(得分:2)
以简单的方式,
只需将标记设置为按钮
即可为下面图片中的所有按钮选择一个操作,
并使用标记
访问所有按钮- (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");
}
}
您将以这种方式访问所有活动。
答案 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并将多个动作拖动到同一个方法,在该方法中,您可以检查收到的事件类型并相应地执行操作。