2009-10-27 2 views

ответ

0

Вы, вероятно, следуешь обрабатывать UIControlTouchDown события и в зависимости от того, что вы подразумеваете под «держать», огнь NSTimer, который будет рассчитывать интервал, так как вы инициировали контакт и аннулирование при обжиге или отпускание прикосновения (UIControlTouchUpInside и UIControlTouchUpOutside событий). Когда срабатывает таймер, вы обнаружите, что ваш «отвод & удерживается».

+0

Я банкой не достаточно эксперта, чтобы прибыть из этого ответа на фактический код ... Но я имею в виду Держа такое же поведение в Mobile Safari при нажатии и удержании URL-адреса, чтобы всплыл экран действия, чтобы показать параметры этого URL-адреса – JFMartin

6

Вот код, поднятый прямо из моего приложения. Вы должны добавить эти методы (и элемент boolean _cancelTouches) в класс, который вы получаете из UITableViewCell.

-(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

Вы не должны использовать такой код self -> _ cancelTouches = YES; Вместо использования self.cancelTouches = YES; и объявить собственность приватной – Igor

+2

Что это за синтаксис «-> _»? никогда не видел его раньше :) –

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"); 

    } 

} 
Смежные вопросы