I believe the way to do this is to setup a timer on touchDown to fire once 
after X number of seconds. Your touchUp and touchCancelled should kill the 
timer if the timer is exists and is not invalidated. If you hit the timer you 
are being held. When the timer is hit you restart the timer again for the next 
check. 

Scott


On Jun 4, 2010, at 7:16 PM, Alejandro Marcos Aragón wrote:

> Hi all,
> 
> I've been trying to detect touch and hold vs touch on a subclass of UIButton. 
> I basically accomplished that by doing the following:
> 
> I first add the following when the button is created:
> 
> 
>       [button addTarget:self action:@selector(sourceSelected:)
>               forControlEvents:UIControlEventTouchUpInside];
>       [button addTarget:self action:@selector(sourceTouchDown:) 
>               forControlEvents:UIControlEventTouchDown];
> 
> Then in the functions:
> 
> - (void) sourceSelected:(UIButton*) sender {
> 
>       
>       // cancel request for extended meny
>       [NSObject cancelPreviousPerformRequestsWithTarget:self 
> selector:@selector(sourceSelectedExtended:) object:sender];
>       ...
> }
> 
> - (void) sourceTouchDown:(UIButton*) sender {
> 
>       // give time before performing action
>       [self performSelector:@selector(sourceSelectedExtended:) 
> withObject:sender afterDelay:0.5];  
> }
> 
> - (void) sourceSelectedExtended:(UIButton*) sender {
> 
>       // remove action from button
>       [sender removeTarget:self action:@selector(sourceSelected:) 
> forControlEvents:UIControlEventTouchUpInside];
>       ...
>       ...
>       // give time before performing action
>       [self performSelector:@selector(addSourceAction:) withObject:sender 
> afterDelay:1.];  
> 
> }
> 
> - (void) addSourceAction:(UIButton*)sender {
> 
>       // remove action from button
>       [sender addTarget:self action:@selector(sourceSelected:) 
> forControlEvents:UIControlEventTouchUpInside];
>       
> }
> 
> 
> 
> Now, this works fine, but then I thought there must be an easier (and 
> definitely more elegant) way to accomplish the same thing.
> 
> Can someone through me a line here?
> 
> Thank you all,
> 
> aa
> 
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/scottandrew%40roadrunner.com
> 
> This email sent to scottand...@roadrunner.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to