2009-10-27 15 views

Antwort

0

Sie sollten wahrscheinlich behandeln die UIControlTouchDown Ereignis und je nachdem, was Sie mit „halten“ ein NSTimer Feuer, das ein Intervall zählen, da Sie die Berührung ausgelöst und ungültig beim Brennen oder Lösen der Berührung (UIControlTouchUpInside und UIControlTouchUpOutside Ereignisse). Wenn der Timer ausgelöst wird, haben Sie Ihre "& halten" erkannt.

+0

Ich bin Dose nicht genug Experten aus dieser Antwort auf tatsächlichen Code kommen ... aber ich meine Halt durch das gleiche Verhalten in Mobile Safari, wenn Sie eine URL antippen und halten, um ein Aktionsblatt zu öffnen, um Optionen zu dieser URL anzuzeigen – JFMartin

6

Hier ist der Code direkt von meiner App aufgehoben. Sie sollten diese Methoden (und ein boolesches _cancelTouches-Member) zu einer Klasse hinzufügen, die Sie von UITableViewCell ableiten.

-(void) tapNHoldFired { 
    self->_cancelTouches = YES; 
    // DO WHATEVER YOU LIKE HERE!!! 
} 
-(void) cancelTapNHold { 
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tapNHoldFired) object:nil]; 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    self->_cancelTouches = NO; 
    [super touchesBegan:touches withEvent:event]; 
    [self performSelector:@selector(tapNHoldFired) withObject:nil afterDelay:.7]; 
} 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self cancelTapNHold]; 
    if (self->_cancelTouches) 
     return; 
    [super touchesEnded:touches withEvent:event]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    [self cancelTapNHold]; 
    [super touchesMoved:touches withEvent:event]; 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self cancelTapNHold]; 
    [super touchesCancelled:touches withEvent:event]; 
} 
+6

Sie sollten niemals Code wie diesen verwenden self -> _ cancelTouches = YES; Anstatt einfach zu verwenden self.cancelTouches = YES; und deklarieren property private – Igor

+2

Was ist diese Syntax "-> _"? noch nie zuvor gesehen :) –

6
//Add gesture to a method where the view is being created. In this example long tap is added to tile (a subclass of UIView): 

    // Add long tap for the main tiles 
    UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longTap:)]; 
    [tile addGestureRecognizer:longPressGesture]; 
    [longPressGesture release]; 

-(void) longTap:(UILongPressGestureRecognizer *)gestureRecognizer{ 
    NSLog(@"gestureRecognizer= %@",gestureRecognizer); 
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { 
     NSLog(@"longTap began"); 

    } 

}