Создание нового события в Интерфейсном Разработчике - PullRequest
0 голосов
/ 12 февраля 2012

Я разрабатываю новый компонент, который будет использоваться в Интерфейсном Разработчике, который подклассов UIPickerView создает интерфейс, который похож на UIDatePicker, но также включает секунды. Я хотел бы, чтобы разработчик, использующий мой компонент, мог перетаскивать новый объект из библиотеки, настраивать его как класс TimePickerView и использовать его оттуда.

Этот бит отлично работает, но теперь я хотел бы реализовать некоторые из событий, которые доступны в стандартном UIDatePicker, в частности, событие «Value Changed». Я не уверен, как объявить событие таким образом без использования протокола делегата. Я также не уверен, как заставить XCode знать о событиях, которые доступны на объекте. Поэтому я действительно задаю три вопроса:

  1. Как я могу объявить событие, такое как событие Value Changed в UIDatePicker?
  2. Как я могу запустить событие из моего TimePickerView?
  3. Как я могу сообщить XCode об этом событии, чтобы разработчик мог легко связать событие с контроллером?

Поскольку это не кажется легким для выполнения, я подозреваю, что для этого может быть причина; поэтому я также был бы признателен за комментарии по поводу моего подхода и аргументы в пользу того, почему я должен создать протокол делегата, чтобы это произошло.

1 Ответ

1 голос
/ 16 июля 2012

В Objective C и инфраструктуре какао нет ничего лучше, чем объявление события (как вы сделали бы, например, в C #), такое же поведение события достигается с помощью шаблона делегата (так все классы какао обрабатывают события), поэтомудля реализации пользовательских событий с шаблоном делегата вы можете сделать это, например:

Объявления интерфейса протокола и пользовательского класса:

@protocol myDelegate <NSObject>
-(void)valueChanged:(double) value;
@end

@interface UAKTestDelegate : UIPickerView

@property(weak) id<myDelegate> delegate;

@end

Где-то в реализации (запустить событие):

//Example of firing the event ....
if([[self delegate] respondsToSelector:@selector(valueChanged:)]) {
    [[self delegate] valueChanged:1.0];
}

Итак, эта первая часть ответа должна касаться первых двух вопросов в вашем посте (создание и запуск пользовательских событий), но ответна третий ответ просто вы не можете ...

Xcode (в данном случае построитель интерфейса) знает о событиях, которые UIControl (или его подкласс) реализует, но нет никакого способа рассказать ему о ваших собственных пользовательских событиях.

Так что я думаю, что в вашем случае (если вы можете) вы можете создать подкласс непосредственно UIDatePicker и evпереопределить значение valueChanged, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...