2010-04-15 16 views
15

Je sais que c'est une question très fréquemment posée, mais toutes les réponses sur chaque site ne fonctionnent pas! Si vous ne savez toujours pas ce que je veux dire, alors peut-être que cette ligne de code vous aidera à comprendre.Comment dites-vous quel objet est touché dans les touchesBegan?


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:self.view]; 
    if (touch.view == nextbutton) 
     [self performSelector:@selector(next)]; 
    if (touch.view == prevbutton) 
     [self performSelector:@selector(previous)]; 
    if (touch.view == moreoptionsbutton) 
     [self performSelector:@selector(moresettings)]; 
} 

Il ne fait rien quand vous touchez nextbutton, prevbutton, and more optionsbutton, qui sont UIImageViews par la voie. J'ai également essayé d'utiliser isEqual: au lieu de ==, mais cela n'a pas fonctionné non plus. Aucune suggestion?

Répondre

34

Vous devez définir userinteractionEnabled = YES pour tous vos UIImageViews sinon ils ne recevront pas d'événements tactiles. Également modifier la ligne:

UITouch *touch = [[event allTouches] anyObject]; 

à

UITouch *touch = [touches anyObject]; 
+1

Nous vous remercions de l'astérisque userinteractionEnabled = YES. Je me cognais la tête pour comprendre pourquoi mon UIImageView n'enregistrait pas de touches. – DenVog

2

J'ai créé un chèque pour être sûr que son l'opinion que je pense être cliqué avant de continuer.

if([touch.view isKindOfClass:[Custom class]]){ 
    CGPoint touchPoint = [touch locationInView:self.view]; 

    if(CGRectContainsPoint(self.customClassOne.frame, touchPoint) 
     || CGRectContainsPoint(self.customClassTwo.frame, touchPoint)){ 
     [self touchOnCustomClass]; 
    } 
}