2010-01-20 14 views
0

Ce que je veux est de remplacer UINavigationBar tintColor setter et de forcer la couleur par défaut. Bellow est mon code (qui échoue bien sûr). Y a-t-il un moyen de le faire fonctionner?Est-il possible de forcer la valeur dans le setter de la propriété?

@implementation UINavigationBar (UINavigationBarCategory) 
- (void)setTintColor:(UIColor *)tint { 
self.tintColor = [UIColor greenColor]; 
} 
@end 

Répondre

2

(J'utilise property comme un terme générique ici, dans votre exemple, il est un stand-in pour tintColor)

Je ne pense pas que vous pouvez utiliser la syntaxe self.property = pour l'affectation dans un setProperty: méthode. self.property est juste un alias pour [self setProperty:<value>] et il s'appellera récursivement lui-même.

Vous devez faire quelque chose comme ceci:

- (void)setProperty:(id)pProperty { 
    [property autorelease]; 

    property = [pProperty retain]; 
} 

Je ne suis toujours pas 100% sûr de ce que vous essayez de faire fonctionnera, mais ce qui précède est un début.

+0

Merci pour votre réponse informative! Je comprends le problème récursif de mon code et c'est pourquoi j'étais intéressé s'il y avait un autre moyen. En ce qui concerne mon problème particulier, j'ai trouvé une autre façon de forcer la couleur par défaut. – sniurkst

1

Si vous voulez forcer une couleur par défaut d'un NavigationBar, pourquoi ne vous définissez pas la couleur de teinte dans viewDidLoad/viewDidAppear de votre contrôleur de vue ??

self.navigationController.navigationBar.tintColor = [UIColor (color you want)]; 
+0

Fondamentalement, parce que j'ai beaucoup de contrôleurs de vue et je voudrais avoir un seul endroit où je peux définir une telle propriété pour toutes les barres de navigation. Aussi ce serait trop facile! :) – sniurkst