iPhone 3.1 SDK: категория UIViewController влияет на ВСЕ ViewControllers - PullRequest
5 голосов
/ 25 мая 2010

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

Неужели мое понимание категорий неверно? Кто-нибудь может пролить свет на это?

Спасибо.

Ответы [ 2 ]

8 голосов
/ 25 мая 2010

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

0 голосов
/ 25 мая 2010

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

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

...