risposta

45

Questo è in realtà più facile di quanto si pensi. Devi solo assicurarti di abilitare l'interazione dell'utente su imageView e puoi aggiungere un tocco di tocco ad esso. Questo dovrebbe essere fatto quando la cella viene istanziata per evitare di avere più gesti di tocco aggiunti alla stessa vista dell'immagine. Per esempio:

- (instancetype)initWithCoder:(NSCoder *)aDecoder 
{ 
    if (self = [super initWithCoder:aDecoder]) { 
     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod:)]; 

     [self.imageView addGestureRecognizer:tap]; 
     [self.imageView setUserInteractionEnabled:YES]; 
    } 

    return self; 
} 

- (void)myTapMethod:(UITapGestureRecognizer *)tapGesture 
{ 
    UIImageView *imageView = (UIImageView *)tapGesture.view; 
    NSLog(@"%@", imageView); 
} 
+0

In myTapMethod, come si accede a imageView? – oyalhi

+1

@oyalhi la classe UIGestureRecognizer ha una [visualizzazione] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/index.html#//apple_ref/occ/instp/UIGestureRecognizer/view) proprietà che ti porterà lì. Vedi la mia risposta aggiornata. –

3

è possibile utilizzare un CustomButton invece UIImageView

+0

Grazie, soluzione semplice. – dzensik

0

Un rubinetto gesto riconoscitore può essere molto avido di memoria e può causare altre cose sulla pagina di rompere. Riconosco personalmente la creazione di una cella di tabella personalizzata, l'inserimento di un pulsante nella cornice di cella personalizzata e nel codice tableview impostare l'immagine self.customtablecell.background.image nell'immagine desiderata. In questo modo è possibile assegnare al pulsante un IBaction per spingerlo a qualsiasi visualizzazione desiderata.

6

Prova questa

//within cellForRowAtIndexPath (where customer table cell with imageview is created and reused) 
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleImageTap:)]; 
tap.cancelsTouchesInView = YES; 
tap.numberOfTapsRequired = 1; 
[imageView addGestureRecognizer:tap]; 

// handle method 
- (void) handleImageTap:(UIGestureRecognizer *)gestureRecognizer 
{ 
    RKLogDebug(@"imaged tab"); 
} 

assicurarsi u hanno ....

imageView.userInteractionEnabled = YES; 
+0

+ 1 per mostrare il passaggio del riconoscimento alla funzione. Perché questo "tap.delegate = self;" quando non lo stai effettivamente usando? – Kevin

0

Usa ALActionBlocks all'azione nel blocco

__weak ALViewController *wSelf = self; 
imageView.userInteractionEnabled = YES; 
UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithBlock:^(UITapGestureRecognizer *weakGR) { 
    NSLog(@"pan %@", NSStringFromCGPoint([weakGR locationInView:wSelf.view])); 
}]; 
[self.imageView addGestureRecognizer:gr];