2010-12-13 11 views
6

ho diversi UIImageView, ognuno di essi ha un tag; e ho una serie di immagini, quello che voglio fare è: quando l'utente tocca uno dei UIImageView, l'app restituisce la determinata immagine da matrice.come ottenere il tag di UIImageView che sto toccando?

a implementare in questo modo:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
    [self.view addSubview:scroll]; 

    NSInteger i; 
    for (i=0; i<8; i++) 
    { 
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, i*100 + i*15, 300, 100)]; 
     imageView.backgroundColor = [UIColor blueColor]; 
     imageView.userInteractionEnabled = YES; 
     imageView.tag = i; 

     NSLog(@"%d", imageView.tag); 

     [scroll addSubview:imageView]; 

     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(findOutTheTag:)]; 
     [imageView addGestureRecognizer:tap]; 

    } 

    scroll.contentSize = CGSizeMake(320, 115*i); 

} 
- (void)findOutTheTag:(id)sender 
{ 

    // HOW TO FIND THE tag OF THE imageView I'M TAPPING? 

} 

Voglio scoprire la imageView.tag, e passare a imageView.tag

UIImageView *tappedImage = [imageArray objectAtIndex:imageView.tag]; 

per visualizzare l'immagine.

Ho taggato tutti, la domanda è come posso scoprire lo tag di imageView Sto toccando? grazie per aver letto^_^

risposta

12

A rischio di fare una raccomandazione senza vedere l'immagine completa della tua app, perché non usare un UIButton personalizzato invece di UIImageViews per questo? Con un UIButton puoi impostare un'azione e passare l'id del mittente, dal quale puoi facilmente accedere ai tuoi tag e tirare i dati dal tuo array.

O se si vuole veramente utilizzare il codice di cui sopra e la vostra sa per certo il - (void) findOutTheTag: (id) il metodo del mittente viene chiamato, tutta la vostra che dobbiamo fare è:

- (void)findOutTheTag:(id)sender { 
    switch (((UIGestureRecognizer *)sender).view.tag)  
{ 
    case kTag1: 
    //... 
    case kTag2: 
    //... 
    } 
} 
+1

Il mittente qui è il riconoscitore di gesti, quindi è necessario eseguire 'switch (((UIGestureRecognizer *) mittente .view.tag)'. – Anna

+0

@aBitObvious buona raccolta! – Rog

+3

+1 - (vuoto) childTapped: (UITapGestureRecognizer *) tapGesture {int tag = tapGesture.view.tag;} // ha funzionato per me – HDdeveloper

2

Invece di usare UIImageView perché non usi un UIButton. In questo modo puoi semplicemente aggiungere un listener per gli eventi UITouchDown. Puoi taggare ogni pulsante in modo che nel tuo metodo touchDown puoi trovare quale pulsante è stato premuto.

UIButton *button = [[UIImageView alloc] initWithFrame:CGRectMake(10, i*100 + i*15, 300, 100)]; 
    button.backgroundColor = [UIColor blueColor]; 
    button.tag = i; 
    [button addTarget:self action:@selector(touchDown:) controlEvent:UIControlEventTouchDown]; 

E all'interno della Touchdown: metodo è sufficiente lanciare il mittente di un UIButton al fine di accedere al tag.

- (void)touchDown:(id)sender 
{ 
    UIButton* button = (UIButton*)sender; 
    switch(button.tag) 
    { 
     case TAG1: 
      break; 
     //etc 
    } 
} 
+0

grazie, DHamrick, ho provato l'UIButton invece di UIImageView, e restituisce perfettamente il tag, mi ha aiutato a saltare il mio pensiero, ma usare UIButton può portare ad implementare molti gesti per ottenere altri gesti come longPress e swipe che ho bisogno di usare, per spostare/eliminare il viewItem (anche tag e array coinvolti), potrebbe diventare complesso nella mia costruzione, dal momento che UIGestureRecognizer li aveva già, decido di usarli, comunque, grazie mille per il tuo aiuto, ti invierò l'app.^_ ^ – flutewang

1

Per scoprire quale immagine deve essere tatto, utilizzare touchBegan metodo:

Nota: Prima di tutto è necessario confermare su visualizzazione dell'immagine dovrebbe essere userIntrectionEnabled=YES; Ora utilizzare questo metodo:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{ 
    // get touch event 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchLocation = [touch locationInView:self.view]; 
    if ([touch view].tag == 800) { 

    //if image tag mated then perform this action  
    } 
} 

È possibile utilizzare un'istruzione switch all'interno touchBegan.

Problemi correlati