Сделать свой собственный UIControlEvent и запустить его? - PullRequest
5 голосов
/ 26 мая 2011

У меня есть собственный класс UIView, который я сделал внутри моего viewcontroller.Я хочу сделать этот класс многоразовым и поэтому не хочу, чтобы он работал только с этим 1 viewcontroller.Из-за этого я думаю лучший способ сообщить моему viewcontroller, что пользователь взаимодействовал с классом, - это каким-то образом создать свой собственный UIControlEvent.Может быть, что-то вроде:

[customClass addTarget:self action:@selector(whatIWantToHappen) forControlEvents:UIControlEventWhatever];

Я не знаю много об этом, какие-либо предложения по этому поводу?

Ответы [ 2 ]

9 голосов
/ 26 мая 2011

Вы можете сделать это, создав подкласс UIControl, который наследуется от UIView, но предоставляет некоторые дополнительные методы для обработки целей и действий.Посмотрите на константы , возможно, одно из предопределенных управляющих событий уже соответствует вашему счету.В противном случае вы можете определить свои собственные события в диапазоне, указанном в UIControlEventApplicationReserved, однако вы должны никогда добавлять свои собственные префиксы к UI..., это «пространство имен» зарезервировано для UIKit.

2 голосов
/ 25 сентября 2013

В дополнение к ответу от omz вы можете получить предупреждение компилятора при этом:

[self addTarget:self action:@selector(selector:) forControlEvents:CustomControlEvent];

Компилятору не нравится, когда пользовательское значение используется для последнего параметра, который имеет типUIControlEvents, поэтому выдает предупреждение.

Я сделал это:

enum CustomControlEvent : UIControlEvents
{
    CustomControlEventWHATEVER  =   UIControlEventApplicationReserved
};
typedef enum CustomControlEvent CustomControlEvent;

Вот!Больше предупреждений нет.

Я нашел это обозначение в этом ответе StackOverflow.

NB. Для UIControlEvents я настоятельно избегаю использования любых недоступных значений, поэтому яиспользуйте только значение UIControlEventApplicationReserved.

Кроме того, typedef избавляет от необходимости каждый раз вводить 'enum' и является обычным.

...