iPhone 3.1 SDK: категория UIViewController влияет на ВЕСЬ ViewControllers

вопрос о 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 редактируются, и конечно некоторые мои представления не должны быть смещены, когда клавиатура появляется, поскольку клавиатура не скрывает поля.

Действительно ли мое понимание категорий является неправильным? Кто-либо может пролить какой-либо свет на это?

Спасибо.

5
задан Diego Garcia 25 May 2010 в 11:29
поделиться

2 ответа

Нет, так работают категории - если вы добавите некоторые методы в класс, то все эти изменения будут доступны для всех экземпляров этого класса во время выполнения.

8
ответ дан 14 December 2019 в 08:44
поделиться

Важным моментом является то, что в файле, где вы #import "UIViewController Shiftable.h", все экземпляры UIViewController будут иметь новые методы. Если вы не импортируете файл категории, ни один из ваших UIViewController не будет иметь новых методов.

Если вам нужно, чтобы некоторые контроллеры представления имели эти новые/измененные методы, а другие контроллеры представления - нет, рассмотрите возможность создания подкласса UIViewController.

-1
ответ дан 14 December 2019 в 08:44
поделиться