2010-05-25 13 views
5

pytanie iPhone SDK dla Ciebie.iPhone 3.1 SDK: Kategoria UIViewController wpływa na WSZYSTKIE ViewControllers

Utworzyłem kategorię UIViewController, aby przesunąć widok podczas edycji UITextFields i pojawienia się klawiatury, blokując pola. Znalazłem kod online i bez wątpienia ci guru na iPhone znają go. Interfejs wygląda następująco:

@interface UIViewController (Shiftable) 

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

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

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

@end 

Mój problem jest this-- każdy z moich UIViewControllers ma wpływ tej kategorii! Myślałem, że to wpłynęłoby tylko UIViewControllers że importować kategorię następująco:

#import "UIViewController Shiftable.h" 

Ale nawet UIViewControllers które nie importują tę kategorię mają ich poglądy przesunął się, gdy są edytowane UITextFields i oczywiście niektóre z moich poglądów nie trzeba być przesuniętym, gdy pojawia się klawiatura, ponieważ klawiatura nie ukrywa pól.

Czy moje rozumienie kategorii jest nieprawidłowe? Czy ktoś może rzucić jakieś światło na ten temat?

Dzięki.

Odpowiedz

8

Nie, to jest sposób w jaki działają kategorie - jeśli dodasz pewne metody do klasy, wszystkie te zmiany będą dostępne dla wszystkich instancji tej klasy w czasie wykonywania.

-1

Ważne jest, że w pliku, gdzie #import "UIViewController Shiftable.h", wszystkie wystąpienia UIViewController będą miały nowe metody. Jeśli wyłączysz zaimportować plik kategorii, nie będzie mieć żadnego Twojego UIViewControllers.

Jeśli potrzebujesz kontrolerów widoku, aby mieć te nowe/zmodyfikowane metody, ale inne kontrolery widoku nie, rozważ podklasę UIViewController.

+5

Wszystkie instancje UIViewController będą reagować na metody dodane w kategorii niestandardowej, niezależnie od tego, czy importowany nagłówek zawierał definicję kategorii, czy nie. Importowanie nagłówka wpłynie tylko na ostrzeżenia kompilatora dotyczące tych metod. – Vladimir

+0

Natknąłem się na moją własną odpowiedź sprzed roku ... Ups! - oczywiście masz absolutną rację! –

Powiązane problemy