Это происходит потому, что вы создаете объект типа UIButton
, а не тип UICustomButton
внутри метода init, когда выполняете
self = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
Попробуйте заменить метод init
на
- (id)initWithAnswer:(Answer *)ans andButtonType:(NSString *)type andFrame:(CGRect)frame;
{
self = [self initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
if (self)
{
self.backgroundColor = [UIColor colorWithHexString:@"#E2E4E7"];
[self addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
self.answer = ans;
self.btnType = type;
}
return self;
}
Это приведет к тому, что self
будет объектом типа UICustomButton
.
Кроме того, вы используете неверный тип для параметра UIControlState, когда добавляете цель к своей кнопке, используя метод addTarget:action:forControlEvents:
Вы должны использовать значение среди приведенных ниже:
UIControlEventTouchDown
UIControlEventTouchDownRepeat
UIControlEventTouchDragInside
UIControlEventTouchDragOutside
UIControlEventTouchDragEnter
UIControlEventTouchDragExit
UIControlEventTouchUpInside
UIControlEventTouchUpOutside
UIControlEventTouchCancel
EDIT:
Замечания по подклассам UIButton
Многие ссылки в Интернете говорят, что вы НЕ должны делить класс UIButton
на подклассы, но не только кто-то сказал, почему, но меня также очень раздражало то, что UIButton Class Reference ничего не говорит об этом в все.
Если вы берете UIWebView Class Reference , например, в нем прямо говорится, что вы не должны подкласс UIWebView
Примечания по подклассам Класс UIWebView
не должно быть подклассом.
большая проблема с UIButton
заключается в том, что он наследуется от UIControl
, а хорошее и простое объяснение содержится в справочнике классов UIControl *
Примечания по подклассам Вы можете захотеть
расширить подкласс UIControl для любого
по двум причинам:
- Для наблюдения или изменения отправки
сообщения о действиях для целей
отдельные события
- Для предоставления пользовательских
отслеживание поведения (например, для
изменить внешний вид подсветки)
Итак, это означает, что вы CAN подкласс UIButton
, но вы должны быть осторожны в том, что вы делаете. Просто создайте подкласс, чтобы изменить его поведение и , а не его внешний вид . Чтобы изменить внешний вид UIButton
, вы должны использовать методы интерфейса, предусмотренные для этого, такие как:
setTitle: forState:
setBackgroundImage: forState:
setImage: forState:
Список литературы, которую стоит прочитать
Источник: мой пост здесь