2010-05-25 15 views
5

iPhone SDK Frage für Sie.iPhone 3.1 SDK: UIViewController Kategorie betrifft alle ViewControllers

Ich habe eine UIViewController-Kategorie erstellt, um eine Ansicht nach oben zu verschieben, wenn UITextFields bearbeitet werden und die Tastatur angezeigt wird, wodurch die Felder blockiert werden. Ich habe den Code online gefunden und zweifle nicht, dass Ihr iPhone-Gurus damit vertraut sind. Die Schnittstelle sieht wie folgt aus:

@interface UIViewController (Shiftable) 

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

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

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

@end 

Mein Problem ist this-- jeder meiner UIViewControllers wird von dieser Kategorie betroffen! Ich dachte, das nur UIViewControllers beeinflussen würde, die die Kategorie importieren wie folgt:

#import "UIViewController Shiftable.h" 

Aber auch UIViewControllers, die diese Kategorie nicht importiert haben, ihre Ansichten nach oben verschoben, wenn UITextFields bearbeitet werden, und natürlich einige meiner Ansichten nicht brauchen verschoben werden, wenn die Tastatur erscheint, da die Tastatur die Felder nicht verdeckt.

Ist mein Verständnis von Kategorien inkorrekt? Kann irgendjemand etwas dazu sagen?

Danke.

Antwort

8

Nein, so funktionieren die Kategorien - wenn Sie einer Klasse einige Methoden hinzufügen, stehen all diese Änderungen zur Laufzeit für alle Instanzen dieser Klasse zur Verfügung.

-1

Der wichtige Punkt ist, dass in der Datei, wo Sie #import "UIViewController Shiftable.h", alle Instanzen von UIViewController werden die neuen Methoden haben. Wenn Sie nicht importieren Ihre Kategorie-Datei, keine Ihres UIViewControllers wird.

Wenn Sie einige View-Controller benötigen, um diese neuen/modifizierten Methoden zu verwenden, aber andere View-Controller nicht, sollten Sie UIViewController als Unterklasse betrachten.

+5

Alle UIViewController-Instanzen reagieren auf die in der benutzerdefinierten Kategorie hinzugefügten Methoden, unabhängig davon, ob Sie den Header mit der Kategoriedefinition importiert haben oder nicht. Das Importieren von Header wirkt sich nur auf Compiler-Warnungen über diese Methoden aus. – Vladimir

+0

Bin gerade auf meine eigene Antwort von vor einem Jahr gestoßen ... Whoops! - Du hast natürlich Recht! –