3

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

4

3 回答 3

13

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

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

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

就是这样!

于 2012-08-29T09:20:28.837 回答
6

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

UIButton 不是初始化程序返回的实际类类型。UIButton 是一系列私有类的前端。

假设你有:

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

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

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

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

于 2009-07-06T13:24:20.690 回答
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];
}
于 2011-05-14T21:57:39.133 回答