Objective c 设置需要重新显示

Objective c 设置需要重新显示,objective-c,ipad,uibutton,drawrect,Objective C,Ipad,Uibutton,Drawrect,我有一个经常被讨论的drawRect没有接到电话。我已经浏览了很多帖子,但还没有解决我的问题 解决方案通常被描述为调用-setNeedsDisplay。问题的答案 指示在子视图上调用它而不是self 我已经创建了一个子视图来绘制按钮。按钮被选中 - (IBAction) selected1:(id)sender { NSLog(@"selected1"); UIButton *button = (UIButton *)sender; [button setTi

我有一个经常被讨论的drawRect没有接到电话。我已经浏览了很多帖子,但还没有解决我的问题

解决方案通常被描述为调用
-setNeedsDisplay
。问题的答案 指示在子视图上调用它而不是
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调用未触发。
[um setNeedsDisplay]
替换为
[button setNeedsDisplay]
不会触发drawRect调用。
尝试使用
self
失败,因为selected1方法是UIApplicationEndelegate类型的类。找不到方法-setNeedsDisplay

尝试
[self.window setNeedsDisplay]
不会有任何进展

直接调用drawRect(不想这样做)
CGRect rect=button.frame;[um drawRect:rect]演示当前的方法,日志记录处于活动状态


解析可能很简单,但我无法理解。

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

是否在UsableMark中重写init方法以设置默认帧?如果不是,则帧的大小将为零,UIKit可能会跳过将其显示为性能操作。是否覆盖initWithFrame。但是使用的init没有它。已修改代码以使用initWithFrame。现在调用initWithFrame。drawRect也是如此!谢谢drawRect被称为。把你的评论改成答案,我会记下来的。现在来研究为什么drawRect图形不可见的问题。drawRect一旦执行,就不会产生可见的结果,因为initWithFrame中提供的框架应该是0,0,button.frame.size.width,frame.size.height,而不是框架。这最终导致了图形的双偏移,并且给定了按钮的位置,它是“屏幕外”的。