2012-12-13 4 views
7

Avevo un progetto che contiene molti UIButton, usando xcode 4.5 e storyboard e ARC. dopo il test in ios6, tutto va bene. Ma in ios5, UIButton ritocca all'interno dell'evento non funzionante, l'azione non viene chiamata. Ho provato a usare il touch down e funziona. Tuttavia, ho un sacco di UIButton, non posso cambiarlo uno per uno. inoltre, l'evento di atterraggio offre una buona esperienza.UIButton ritocca all'interno dell'evento non funziona in ios5 mentre è ok in ios6

ho usato codice qui sotto in molti dei miei controller di vista: in viewDidLoad:

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

[self.view addGestureRecognizer:tap]; 

-(void)dismissKeyboard { 
     [aTextField resignFirstResponder]; 
} 

questo potrebbe essere il motivo. Lo controllerò più tardi. Ma funziona in iOS6. Sai cosa c'è che non va? Grazie mille!

risposta

16

Ho avuto lo stesso problema a voi. Questo perché l'evento di tocco in iOS5 viene impedito quando il gestureRecognizer registrato registra l'evento.

Esistono due soluzioni.

One:

1) aggiungere una nuova vista all'interno della vostra vista. Dovrebbe avere lo stesso livello dei pulsanti. La priorità dei pulsanti dovrebbe essere superiore alla nuova vista.

2) modificare la chiamata di "addGestureRecognizer" nella nuova vista.

[self.newView addGestureRecognizer:tap]; 

Due:

1) Implementare il codice qui sotto. Si dovrebbe restituire NO quando il punto è nei pulsanti.

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    CGPoint point = [gestureRecognizer locationInView:self.view]; 

    NSLog(@"x = %.0f, y = %.0f", point.x, point.y); 
    if (CGRectContainsPoint(self.testBtn.layer.frame, point)) 
     return NO; 

    return YES; 
} 

ps. devi importare QuartzCore.h per accedere agli attributi del livello.

#import <QuartzCore/QuartzCore.h> 
+0

Grazie per la soluzione! Ha aiutato molto –

5

Basta usare il "cancelsTouchesInView" proprietà (NO) l'UITapGestureRecognizer toccare

Esempio:

UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap)]; 
gesture.cancelsTouchesInView = NO; 
[self.view addGestureRecognizer:gesture]; 
+1

+1 questo è il modo più semplice. –

+0

@JarnoV come posso farlo da Xamarin IOS? –

+0

@ JorgeWanderSantanaUreña, non ho alcuna esperienza con Xamarin .. sorry;) – JarnoV

0

ignorare la modalità pulsante genitore vista pointinside, stabilendo un nuovo formato di struttura personalizzato che contiene la pulsante.