iPhone - 按住时捕获UIButton事件

时间:2011-03-09 21:38:10

标签: iphone event-handling uibutton repeat

我想每0.2秒捕捉一次压迫UIButton的事件。我的意思是,当UIButton被按下时,我想让IBAction专用于按钮每0.2秒触发一次。我已尝试在网上找到一些代码,我知道我需要使用计时器。但是这样做,我在我的catch方法中放弃了我需要的“sender”属性。

我如何才能做到这一点?

4 个答案:

答案 0 :(得分:2)

创建NSTimer时,您可以将自定义对象作为userInfo字段附加到其中(例如,检查+scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:方法的文档 - userInfo参数)。

因此,您可以使用userInfo字段传递您的发件人。

答案 1 :(得分:1)

您不必使用计时器,您可以实现:

  • (void)touchesBegan:(NSSet *)触及withEvent:(UIEvent *)事件;
  • (void)touchesEnded:(NSSet *)触及withEvent:(UIEvent *)事件;

按钮的事件。

如果您希望按秒按下按钮,则可以执行以下操作:

#import <Foundation/Foundation.h>

@interface FancyButton: UIButton
{

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event ;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
@end



#import "FancyButton.h"

NSTimeInterval buttonPressedTime;

@implementation FancyButton
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{  
    buttonPressedTime = [event timestamp];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{  
    if([event timestamp] - buttonPressedTime) > your_desired_press_time)
    {
        [self your_fancy_message]; // or any other processing you will do
    }
   buttonPressedTime = 0;
}
@end

我希望它有所帮助。

答案 2 :(得分:0)

如果你的计时器设置正常并且工作正常,你所需要的只是对按下的按钮的某种引用。您可以在类中创建iVar以及属性,并将其设置在touchDownInside事件处理程序中。然后在计时器方法中检查它。

答案 3 :(得分:0)

如果我看到一些代码,我可能会提供更好的建议,但是当您安排选择器触发时,您可以指定目标对象。只要对象可以访问您的发件人,您就会很好。

在你的情况下我会做什么(如果我理解正确的话)是用发送者更新目标对象:当按下UIButton时,用UIButton更新目标对象。