Touch detection sur une UINavigationBar

remoozremooz Membre
15:41 modifié dans API UIKit #1
Voici mon problème.

Je de dispose d'une vue avec une navigationBar. J'ai remplacé le bouton gauche de la navigationBar par une customView.
Je souhaite effectuer une action lorsque la customView est touché. Pour y arriver j'ai donc redéfini la méthode touchesEnded
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event<br />{<br />	UITouch *touch = [[event allTouches] anyObject];<br />	<br />	if ([touch view] == self.loginView)<br />	{<br />		NSLog(@&quot;touché&quot;);<br />	}<br />}


Ma customView étant réalisée comme suit:
// add our custom image button as the nav bar&#39;s custom right view<br />	loginButton = [[UIBarButtonItem alloc] initWithCustomView:loginView];<br />	self.navigationItem.leftBarButtonItem = loginButton;


Quand je touche la customView rien ne se passe. Par contre si je choisis de détecter la vue principale, ça marche parfaitement quand je touche la vue principale.

Une peu d'aide serait la bienvenue. Merci  :)

Réponses

  • apocaalypsoapocaalypso Membre
    15:41 modifié #2
    Tu peux essayer de créer un rectangle aux même mesures de ta UINavigationBar et vérifier avec CGRectContainsPoint() :

    UITouch *touch = [[event allTouches] anyObject];<br />&nbsp; &nbsp; &nbsp; &nbsp; CGPoint location = [touch locationInView:self];<br />	CGRect rect = CGRectMake(x, y, largeur, hauteur);<br />	if (CGRectContainsPoint(rect, location))<br />	{<br />		NSLog(@&quot;touché&quot;);<br />	}
    

  • AliGatorAliGator Membre, Modérateur
    15:41 modifié #3
    ??? Heu ? Tu as un UIBarButtonItem, qui fonctionne comme un UIButton donc... pourquoi ne pas utiliser le mécanisme de target/action propre aux boutons ? [tt]loginButton.target = self; loginButton.action = @selector(monAction:)[/tt] quoi...
  • remoozremooz Membre
    15:41 modifié #4
    parce qu'en fait mon bouton est déjà  associé à  une action.
    Le retour de cette action modifie le bouton (modification du bouton avec customView)
  • remoozremooz Membre
    15:41 modifié #5
    dans 1243977281:

    Tu peux essayer de créer un rectangle aux même mesures de ta UINavigationBar et vérifier avec CGRectContainsPoint() :

    UITouch *touch = [[event allTouches] anyObject];<br />&nbsp; &nbsp; &nbsp; &nbsp; CGPoint location = [touch locationInView:self];<br />	CGRect rect = CGRectMake(x, y, largeur, hauteur);<br />	if (CGRectContainsPoint(rect, location))<br />	{<br />		NSLog(@&quot;touché&quot;);<br />	}
    



    J'ai essayé cette technique et ce qui est bizarre c'est lorsque je cible la vue avec CGRect rect = CGRectMake(x, y, largeur, hauteur) ça marche impec mais si je cible la navigationBar ça ne marche plus.
Connectez-vous ou Inscrivez-vous pour répondre.