我经常讨论的drawRect不会被调用。我已经看过很多帖子了,但还没有解决我的问题。
解决方案通常被描述为调用-setNeedsDisplay。问题setNeedsDisplay doesn't call 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");
}不会触发UsableMark中的drawRect调用。
用[button setNeedsDisplay]替换[um setNeedsDisplay]不会触发drawRect调用。
尝试使用self失败,因为selected1方法是UIApplicaitonDelegate类型的类。找不到方法-setNeedsDisplay。
尝试[self.window setNeedsDisplay]没有任何进展。
直接调用drawRect (这不是我们想要做的) CGRect rect = button.frame; [um drawRect:rect];演示了当前的方法,日志记录是有效的。
解决办法可能很简单,但我想不起来。
发布于 2011-04-24 08:11:29
问题是调用的是init而不是initWithFrame:。由于使用了默认初始化,视图的框架大小为零,UIKit跳过将其显示为优化。
https://stackoverflow.com/questions/5766167
复制相似问题