drawRect не вызывается для пользовательского подкласса UIButton при выделении
Вопрос
При использовании drawRect для пользовательского подкласса UIButton, кажется, никогда не вызывается, чтобы нарисовать кнопку при выделении. Нужно ли вызывать setNeedsDisplay для моей кнопки в событиях касания?
Решение
Насколько я могу судить, прямого подкласса UIButton нет.
UIButton не является фактическим типом класса, который возвращается инициализаторами. UIButton - своего рода фронт для серии частных классов.
Скажем, у вас было
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSLog(@"myButton type: %@", [myButton description]);
Тип журнала, возвращаемый в журнале, будет "UIRoundedRectButton". Проблема в том, что вам нужно было бы расширить "UIRoundedRectButton". Это невозможно, поскольку это закрытый класс, который возвращается только в UIButton. Р>
Поверх этого " UIRoundedRectButton " не единственный возможный возвращаемый класс, все из которых являются частными. Р>
Другими словами, UIButton был построен таким образом, что не подходит для расширения.
Другие советы
Я нашел простое решение.
Просто добавьте следующий метод в свой подкласс UIButton:
-(void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
[self setNeedsDisplay];
}
Вот и все!
У меня была та же проблема, и я добился успеха, добавив следующее в мой подкласс UIButton
- (void)awakeFromNib {
[self addTarget:self action:@selector(redraw) forControlEvents:UIControlEventAllEvents];
}
- (void)redraw {
[self setNeedsDisplay];
[self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}