首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重新审视setNeedsDisplay

重新审视setNeedsDisplay
EN

Stack Overflow用户
提问于 2011-04-24 02:45:12
回答 1查看 3.2K关注 0票数 2

我经常讨论的drawRect不会被调用。我已经看过很多帖子了,但还没有解决我的问题。

解决方案通常被描述为调用-setNeedsDisplay。问题setNeedsDisplay doesn't call drawRect 的答案是在子视图上调用它,而不是在self上调用。

我已经创建了一个子视图来在按钮上绘制。按钮处于选中状态。

代码语言:javascript
复制
- (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];演示了当前的方法,日志记录是有效的。

解决办法可能很简单,但我想不起来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-24 08:11:29

问题是调用的是init而不是initWithFrame:。由于使用了默认初始化,视图的框架大小为零,UIKit跳过将其显示为优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5766167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档