Ouah, tu descend bien bas niveau appocalypso pour ce genre de truc... Pour des UIViews personnalisées, dont tu veux gérer toi-même la détection de clic, je dis pas (quoiqu'il est préférable d'utiliser pointInside:withEvent: dans ce genre de cas), mais pour un widget/contrôle tout fait comme une TabBar, je ne ferais ça que s'il n'y a pas d'autre solution (mais ça oblige à sous-classer)... Mais surtout, UITabBarItem ne dérive pas de UIView... donc n'a pas de "frame" ! Donc tu ne peux pas tester ce genre de truc avec ton code !
Tu définis (dans la méthode viewDidLoad par exemple) disons ton UITabBarController (ou tout autre objet où tu veux pouvoir gérer ce code, ça dépend ce qui t'arrange le plus, mais bon le UITabBarController lui-même c'est bien souvent le plus pratique dans ce cas) comme étant delegate de... lui-même et il ne te reste plus qu'à mettre le code que tu veux exécuter dans [tt]- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController[/tt]. En testant quel viewController est demandé pour savoir si c'est le même que l'actuel, ou un nouveau, si tu as besoin de différencier les cas. Bon ceci dit si tu tapes sur l'item de la TabBar qui est déjà sélectionné, cette méthode n'est rappellée... que sous iPhone OS 3.0. Sous les versions antérieures d'après ce que dit la doc, si c'est déjà l'onglet sélectionné que tu "tapes" la méthode ne sera pas appellée... Après je sais pas pour quelle cible tu codes.
Sinon voir du côté du UITabBarDelegate directement (et non pas du UITabBarControllerDelegate), y'a sans doute de quoi s'en sortir aussi.
J'ai commencé à chercher il y a quelques semaines comment faire et ... je n'y arrivais pas (avec du code comme celui de apocaalypso) car j'étais en 2.2.1 et la méthode didSelctViewController n'était pas rappelée.
Je ne savais pas que le 3.0 rajouté cette fonctionnalité.
Réponses
Voilà .
Mais surtout, UITabBarItem ne dérive pas de UIView... donc n'a pas de "frame" ! Donc tu ne peux pas tester ce genre de truc avec ton code !
Et puis finalement il y a bien plus simple et surtout plus "Cocoa-style" : avec la methode de delegate [tt]- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController[/tt] (delegate de UITabBarController) : c'est pile fait pour ce que tu veux iPatx.
Tu définis (dans la méthode viewDidLoad par exemple) disons ton UITabBarController (ou tout autre objet où tu veux pouvoir gérer ce code, ça dépend ce qui t'arrange le plus, mais bon le UITabBarController lui-même c'est bien souvent le plus pratique dans ce cas) comme étant delegate de... lui-même et il ne te reste plus qu'à mettre le code que tu veux exécuter dans [tt]- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController[/tt]. En testant quel viewController est demandé pour savoir si c'est le même que l'actuel, ou un nouveau, si tu as besoin de différencier les cas.
Bon ceci dit si tu tapes sur l'item de la TabBar qui est déjà sélectionné, cette méthode n'est rappellée... que sous iPhone OS 3.0. Sous les versions antérieures d'après ce que dit la doc, si c'est déjà l'onglet sélectionné que tu "tapes" la méthode ne sera pas appellée... Après je sais pas pour quelle cible tu codes.
Sinon voir du côté du UITabBarDelegate directement (et non pas du UITabBarControllerDelegate), y'a sans doute de quoi s'en sortir aussi.
Je ne savais pas que le 3.0 rajouté cette fonctionnalité.
Merci apocaalypso et AliGator !