2010-04-15 16 views
15

Sé que esta es una pregunta muy común, pero todas las respuestas en cada sitio web no funcionan. Si aún no sabes a qué me refiero, entonces tal vez esta línea de código te ayude a entender.¿Cómo se puede saber qué objeto se está tocando en 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)]; 
} 

No sirve de nada cuando se toca nextbutton, prevbutton, and more optionsbutton, que son UIImageViews por cierto. También intenté usar isEqual: en lugar de ==, pero eso tampoco funcionó. ¿Alguna sugerencia?

Respuesta

34

Tienes que establecer userinteractionEnabled = YES para todos tus UIImageViews de lo contrario no recibirán eventos táctiles. También cambiar la línea:

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

a

UITouch *touch = [touches anyObject]; 
+1

Gracias por la sugerencia userinteractionEnabled = YES. Me estaba golpeando la cabeza para descubrir por qué mi UIImageView no estaba registrando toques. – DenVog

2

creé una comprobación para asegurarse de su la vista que espero que se hizo clic antes de continuar.

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]; 
    } 
} 
Cuestiones relacionadas