我想每0.2秒捕捉一次压迫UIButton的事件。我的意思是,当UIButton被按下时,我想让IBAction专用于按钮每0.2秒触发一次。我已尝试在网上找到一些代码,我知道我需要使用计时器。但是这样做,我在我的catch方法中放弃了我需要的“sender”属性。
我如何才能做到这一点?
答案 0 :(得分:2)
创建NSTimer
时,您可以将自定义对象作为userInfo字段附加到其中(例如,检查+scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
方法的文档 - userInfo参数)。
因此,您可以使用userInfo
字段传递您的发件人。
答案 1 :(得分:1)
您不必使用计时器,您可以实现:
按钮的事件。
如果您希望按秒按下按钮,则可以执行以下操作:
#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更新目标对象。