drawRect не вызывается для пользовательского подкласса UIButton при выделении - PullRequest
3 голосов
/ 05 мая 2009

При использовании drawRect для пользовательского подкласса UIButton, кажется, никогда не вызывается, чтобы нарисовать кнопку при выделении. Нужно ли вызывать setNeedsDisplay для моей кнопки в событиях касания?

Ответы [ 3 ]

13 голосов
/ 29 августа 2012

Я нашел простое решение.

Просто добавьте следующий метод к вашему подклассу UIButton:

-(void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}

Вот и все!

6 голосов
/ 06 июля 2009

Насколько я могу судить, прямого подкласса UIButton не существует.

UIButton не является фактическим типом класса, который возвращается инициализаторами. UIButton - своего рода фронт для серии частных занятий.

Скажем, у вас было:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSLog(@"myButton type: %@", [myButton description]);

В журнале будет возвращен тип "UIRoundedRectButton". Проблема в том, что вам нужно было бы расширить "UIRoundedRectButton". Это невозможно, поскольку это закрытый класс, который возвращается только в UIButton.

Кроме того, "UIRoundedRectButton" - не единственный возможный возвращаемый класс, каждый из которых является закрытым.

Другими словами, UIButton был построен таким образом, что не подходит для расширения.

1 голос
/ 15 мая 2011

У меня была та же проблема, и удовлетворяющий успех со следующим добавленным к моему UIButton подклассу

- (void)awakeFromNib {
    [self addTarget:self action:@selector(redraw) forControlEvents:UIControlEventAllEvents];
}

- (void)redraw {
    [self setNeedsDisplay];
    [self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}
...