2010-05-25 2 views
5

Question iPhone SDK pour vous.SDK iPhone 3.1: la catégorie UIViewController affecte TOUS les ViewControllers

J'ai créé une catégorie UIViewController pour déplacer une vue quand UITextFields sont en cours d'édition et le clavier apparaît, bloquant les champs. J'ai trouvé le code en ligne et sans aucun doute vous gourous iPhone sont familiers avec lui. L'interface ressemble à ceci:

@interface UIViewController (Shiftable) 

     - (IBAction) textFieldDidBeginEditing:(UITextField *)textField; 

     - (IBAction) textFieldDidEndEditing:(UITextField *)textField; 

     - (void) animateTextField: (UITextField *)textField up:(BOOL)up; 

@end 

Mon problème est this-- chacun de mes UIViewControllers est affecté par cette catégorie! Je pensais que cela ne concernerait UIViewControllers que l'importation de la catégorie comme suit:

#import "UIViewController Shiftable.h" 

Mais même UIViewControllers qui n'importent pas cette catégorie ont leurs vues décalées vers le haut quand UITextFields sont édités, et bien sûr certaines de mes opinions ne ai pas besoin être décalé lorsque le clavier apparaît car le clavier ne cache pas les champs.

Je crois comprendre des catégories incorrectes? Quelqu'un peut-il nous éclairer à ce sujet?

Merci.

Répondre

8

Non, c'est la façon de travailler catégories - si vous ajoutez des méthodes à une classe alors tous ces changements seront disponibles pour toutes les instances de cette classe au cours de l'exécution.

-1

Le point important est que dans le fichier#import "UIViewController Shiftable.h", toutes les instances de UIViewController auront les nouvelles méthodes. Si vous ne le faites pas importer votre fichier de catégorie, aucun de vos UIViewControllers sera.

Si vous avez besoin des contrôleurs de vue d'avoir ces nouvelles méthodes/modifiées, mais d'autres contrôleurs de vue non, envisagez UIViewController le sous-classement.

+5

Toutes les instances UIViewController réagiront aux méthodes ajoutées dans la catégorie personnalisée quel que soit vous-tête wether importé avec la définition de la catégorie ou non. L'importation d'en-tête n'affecte que les avertissements du compilateur concernant ces méthodes. – Vladimir

+0

Je suis tombé sur ma propre réponse d'il y a un an ... Oups! - Bien sûr, vous avez absolument raison! –

Questions connexes