2010-12-13 92 views
6

J'ai plusieurs UIImageView, chacun d'eux a une étiquette; et j'ai un tableau d'images, ce que je veux faire est: lorsque l'utilisateur appuyez sur l'un des UIImageView, l'application redonner la certaine image de tableau.comment obtenir le tag de l'UIImageView que je suis en train de taper?

i mettre en œuvre comme ceci:

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

} 

Je veux trouver le imageView.tag, et passer imageView.tag à

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

pour afficher l'image.

Je les ai tous marqués, la question est de savoir comment je peux trouver les tag de l'imageView que je suis en train de taper? merci d'avoir lu^_^

Répondre

12

Au risque de faire une recommandation sans voir l'image complète de votre application, pourquoi ne pas utiliser un UIButton personnalisé au lieu de UIImageViews pour cela? Avec un UIButton, vous pouvez configurer une action et transmettre l'identifiant de l'expéditeur, à partir duquel vous pouvez facilement accéder à vos tags et extraire les données de votre tableau.

ou si vous voulez vraiment utiliser le code ci-dessus et votre savoir pour un fait de la - (void) findOutTheTag: (id) méthode de l'expéditeur est appelé, tous vos avez à faire est:

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

L'expéditeur est ici l'outil de reconnaissance de gestes, donc vous devez faire 'switch ((expéditeur UIGestureRecognizer *) .view.tag)'. – Anna

+0

@aBitObvious bonne ramasser! – Rog

+3

+1 - (void) childTapped: (UITapGestureRecognizer *) tapGesture {int tag = tapGesture.view.tag;} // a travaillé pour moi – HDdeveloper

2

Au lieu d'utiliser un UIImageView, pourquoi n'utilisez-vous pas un UIButton? De cette façon, vous pouvez simplement ajouter un écouteur pour les événements UITouchDown. Vous pouvez marquer chaque bouton de sorte que dans votre méthode TouchDown vous pouvez trouver quel bouton a été pressé.

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]; 

Et à l'intérieur de la Touchdown: la méthode que vous avez tout simplement de jeter l'expéditeur à un UIButton afin d'accéder à l'étiquette.

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

merci, DHamrick, j'ai essayé le UIButton au lieu de UIImageView, et il sort parfaitement le tag, m'a aidé à sortir de ma propre réflexion, mais utiliser UIButton peut conduire à mettre en œuvre beaucoup de gestes pour réaliser d'autres gestes comme longPress et swipe je dois utiliser, pour déplacer/supprimer le viewItem et array impliqué), ça peut devenir complexe dans ma construction, puisque UIGestureRecognizer les avait déjà, je décide de les utiliser, en tout cas, merci beaucoup pour votre aide, je vous enverrai l'application.^_ ^ – flutewang

1

Pour savoir quelle image doit être tactile, utilisez touchBegan méthode:

Note: d'abord tout ce que vous devez confirmer au sujet de vue de l'image doit être userIntrectionEnabled=YES; utiliser maintenant cette méthode:

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

Vous pouvez utiliser l'instruction switch à l'intérieur touchBegan.