drawRect在突出显示时未调用自定义UIButton子类
当使用drawRect作为自定义UIButton子类时,似乎永远不会在突出显示时调用它来绘制按钮。 我是否需要在触摸事件中为我的按钮调用setNeedsDisplay?
据我所知,没有直接的方法来inheritanceUIButton。
UIButton不是初始化程序返回的实际类类型。 UIButton是一系列私人课程的前沿。
说你有:
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; NSLog(@"myButton type: %@", [myButton description]);
您会发现日志中返回的类型为“UIRoundedRectButton”。 问题是你需要扩展“UIRoundedRectButton”。 这是不可能的,因为它是一个只返回给UIButton的私人类。
最重要的是“UIRoundedRectButton”不是唯一可能返回的类,所有这些都是私有的。
换句话说,UIButton的构建方式不适合扩展。
我找到了一个简单的解决方
只需将以下方法添加到您的UIButton子类:
-(void)setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; [self setNeedsDisplay]; }
而已!
我有同样的问题并且满意成功,并将以下内容添加到我的UIButton
子类中
- (void)awakeFromNib { [self addTarget:self action:@selector(redraw) forControlEvents:UIControlEventAllEvents]; } - (void)redraw { [self setNeedsDisplay]; [self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15]; }