У меня часто обсуждается 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];
демонстрирует присутствующий метод, ведение журнала активно.
Разрешение может быть простым, но оно ускользает от меня.