drawRect在突出显示时未调用自定义UIButton子类

时间:2009-05-05 05:53:55

标签: ios uibutton subclass

当将drawRect用于自定义UIButton子类时,似乎永远不会在突出显示时调用它来绘制按钮。我是否需要在触摸事件中为我的按钮调用setNeedsDisplay?

3 个答案:

答案 0 :(得分:13)

我找到了一个简单的解决方案。

只需将以下方法添加到您的UIButton子类:

-(void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}

就是这样!

答案 1 :(得分:6)

据我所知,没有直接的方法来继承UIButton。

UIButton不是初始值设定项返回的实际类类型。 UIButton是一系列私人课程的前沿。

说你有:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSLog(@"myButton type: %@", [myButton description]);

您会发现日志中返回的类型为“UIRoundedRectButton”。问题是你需要扩展“UIRoundedRectButton”。这是不可能的,因为它是一个只返回给UIButton的私人类。

除此之外,“UIRoundedRectButton”不是唯一可能返回的类,所有这些类都是私有的。

换句话说,UIButton的构建方式不适合扩展。

答案 2 :(得分:1)

我遇到了同样的问题并且满意成功,并将以下内容添加到我的UIButton子类

- (void)awakeFromNib {
    [self addTarget:self action:@selector(redraw) forControlEvents:UIControlEventAllEvents];
}

- (void)redraw {
    [self setNeedsDisplay];
    [self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}