У меня часто обсуждаемый метод drawRect не вызывается. Я просмотрел много сообщений, но не решил свою проблему.
Решение часто описывается как вызов -setNeedsDisplay
. Ответ на вопрос setNeedsDisplay не вызывает drawRect указывает, что вызов его в подпредставлении не self
.
Я создал подвид, чтобы рисовать на кнопке. Кнопка выбрана.
- (IBAction) selected1:(id)sender {
NSLog(@"selected1");
UIButton *button = (UIButton *)sender;
[button setTitle:@"Chosen1" forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateDisabled];
// UsableMark *um = [[UsableMark alloc] init ]; // Original
// UsableMark *um = [[UsableMark alloc] initWithFrame:button.frame]; // 1st fix
CGRect umFrame = CGRectMake(0,0,button.frame.size.width,button.frame.size.height); // 2nd fix
UsableMark *um = [[UsableMark alloc] initWithFrame:umFrame ]; // 2nd fix
[button addSubview:um];
[um setNeedsDisplay];
[um release];
button.enabled = NO;
NSLog(@"finished selected1");
}
Вызов drawRect в UsableMark не инициируется.
Замена [um setNeedsDisplay]
на [button setNeedsDisplay]
не вызывает вызов drawRect.
Попытка использования self
завершается неудачно, поскольку метод selected1 является классом типа UIApplicaitonDelegate. Метод -setNeedsDisplay не найден.
Попытка [self.window setNeedsDisplay]
не дает прогресса.
Непосредственный вызов drawRect (чего делать не хочется) CGRect rect = button.frame; [um drawRect:rect];
демонстрирует присутствующий метод, ведение журнала живо.
Решение может быть простым, но оно ускользает от меня.