drawRect не вызывается для пользовательского подкласса UIButton при выделении

StackOverflow https://stackoverflow.com/questions/823524

  •  05-07-2019
  •  | 
  •  

Вопрос

При использовании 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];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top