2012-12-06 15 views
14

Ich habe einen Knopf und ich prüfe die Wasserhähne darauf, mit einem Tipp ändert es eine Hintergrundfarbe, mit zwei Wasserhähnen eine andere Farbe und mit drei Wasserhähnen eine andere Farbe wieder. Der Code ist:iOS - Doppeltippen auf uibutton

- (IBAction) button { 
UITapGestureRecognizer *tapOnce = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnce:)]; 
UITapGestureRecognizer *tapTwice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTwice:)]; 
UITapGestureRecognizer *tapTrice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTrice:)]; 

tapOnce.numberOfTapsRequired = 1; 
tapTwice.numberOfTapsRequired = 2; 
tapTrice.numberOfTapsRequired = 3; 
//stops tapOnce from overriding tapTwice 
[tapOnce requireGestureRecognizerToFail:tapTwice]; 
[tapTwice requireGestureRecognizerToFail:tapTrice]; 

//then need to add the gesture recogniser to a view - this will be the view that recognises the gesture 
[self.view addGestureRecognizer:tapOnce]; 
[self.view addGestureRecognizer:tapTwice]; 
[self.view addGestureRecognizer:tapTrice]; 
} 

- (void)tapOnce:(UIGestureRecognizer *)gesture 
{ self.view.backgroundColor = [UIColor redColor]; } 

- (void)tapTwice:(UIGestureRecognizer *)gesture 
{self.view.backgroundColor = [UIColor blackColor];} 

- (void)tapTrice:(UIGestureRecognizer *)gesture 
{self.view.backgroundColor = [UIColor yellowColor]; } 

Das Problem ist, dass der erste Hahn nicht funktioniert, die andere ja. Wenn ich diesen Code ohne Knopf benutze, funktioniert es perfekt. Danke.

+0

Fügen Sie diese Gesten auf Knopfdruck hinzu? warum fügst du es nicht in viewDidLoad hinzu? – iDev

+0

Da muss ich diese Geste nur auf einen kleinen Teil der Ansicht verwenden. – Kerberos

+0

Aber Ihr Code setzt Gesten auf die gesamte 'self.view'. Sie sollten es wie in meiner Antwort gezeigt ändern. – iDev

Antwort

17

Wenn Sie möchten, dass sich die Farben auf Knopfdruck ändern, sollten Sie diese Gesten auf der Schaltfläche in viewDidLoad Methode oder so lieber als auf der gleichen Schaltfläche Aktion hinzufügen. Der obige Code fügt wiederholt Gesten beim Tippen auf die Schaltfläche self.view und nicht auf button hinzu.

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     UITapGestureRecognizer *tapOnce = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnce:)]; 
     UITapGestureRecognizer *tapTwice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTwice:)]; 
     UITapGestureRecognizer *tapTrice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTrice:)]; 

     tapOnce.numberOfTapsRequired = 1; 
     tapTwice.numberOfTapsRequired = 2; 
     tapTrice.numberOfTapsRequired = 3; 
     //stops tapOnce from overriding tapTwice 
     [tapOnce requireGestureRecognizerToFail:tapTwice]; 
     [tapTwice requireGestureRecognizerToFail:tapTrice]; 

     //then need to add the gesture recogniser to a view - this will be the view that recognises the gesture 
     [self.button addGestureRecognizer:tapOnce]; //remove the other button action which calls method `button` 
     [self.button addGestureRecognizer:tapTwice]; 
     [self.button addGestureRecognizer:tapTrice]; 
} 
Verwandte Themen