вопрос о iPhone SDK для Вас.
Я создал категорию UIViewController для смещения представления, когда UITextFields редактируются, и клавиатура появляется, блокируя поля. Я нашел код онлайн и несомненно Вас, гуру iPhone знакомы с ним. Интерфейс похож на это:
@interface UIViewController (Shiftable)
- (IBAction) textFieldDidBeginEditing:(UITextField *)textField;
- (IBAction) textFieldDidEndEditing:(UITextField *)textField;
- (void) animateTextField: (UITextField *)textField up:(BOOL)up;
@end
Моя проблема - это - каждые из моих UIViewControllers затронуты этой категорией! Я думал, что это будет только влиять на UIViewControllers, которые импортируют категорию следующим образом:
#import "UIViewController Shiftable.h"
Но даже UIViewControllers, которые не импортируют эту категорию, сместили их представления, когда UITextFields редактируются, и конечно некоторые мои представления не должны быть смещены, когда клавиатура появляется, поскольку клавиатура не скрывает поля.
Действительно ли мое понимание категорий является неправильным? Кто-либо может пролить какой-либо свет на это?
Спасибо.
Нет, так работают категории - если вы добавите некоторые методы в класс, то все эти изменения будут доступны для всех экземпляров этого класса во время выполнения.
Важным моментом является то, что в файле, где вы #import "UIViewController Shiftable.h"
, все экземпляры UIViewController будут иметь новые методы. Если вы не импортируете файл категории, ни один из ваших UIViewController не будет иметь новых методов.
Если вам нужно, чтобы некоторые контроллеры представления имели эти новые/измененные методы, а другие контроллеры представления - нет, рассмотрите возможность создания подкласса UIViewController.