未调用 tintColorDidChange
tintColorDidChange not called
我尝试实现我的 UIButton 类别,以便按钮实例可以具有预定义的属性,如边框颜色、边框角等。这是我设置按钮的代码我的类别的 .m 文件:
-(void)buttonForMe {
[[self layer] setCornerRadius:2];
[[self layer] setBorderColor:self.tintColor.CGColor];
[[self layer] setBorderWidth:1];
}
正如您在第二行看到的那样,我将 borderColor 设置为 tintColor,这样当用户触摸按钮时,边框也会像文本一样淡化。 但是没有用。。我四处搜索 Tintcolor in custom border of UIButton 并按照答案进行搜索,但 它也没有用 。
-(void)tintColorDidChange {
[super tintColorDidChange];
[self setNeedsDisplay];
NSLog(@"color changed");
}
我发现上面的方法从来没有被调用过,尽管我的按钮文本的颜色在我按下时确实发生了变化。只是不知道为什么那个方法从未被调用过?是因为我实现的是类别而不是 UIButton 的子类吗?
谢谢
用你的代码试试这个。
btnObj.clipsToBounds = YES;
我用KVO监控tintColor得到了nothing.So,我认为tintColorDidChange没有被调用的原因是点击时tintColor没有改变。
如果你想让你的层在点击时淡出,你可以创建UIButton的子类,然后使用KVO。
示例代码:
@implementation CustomButton
-(instancetype)init{
if (self = [super init]) {
[self setUp];
}
return self;
}
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super initWithCoder:aDecoder]) {
[self setUp];
}
return self;
}
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
[self setUp];
}
return self;
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSNumber * newValue = [change objectForKey:NSKeyValueChangeNewKey];
if (newValue.boolValue) {
self.layer.opacity = 0.3;
}else
{
self.layer.opacity = 1.0;
}
}
-(void)setUp{
[[self layer] setCornerRadius:2];
[[self layer] setBorderColor:self.tintColor.CGColor];
[[self layer] setBorderWidth:1];
[self addObserver:self forKeyPath:@"highlighted" options:NSKeyValueObservingOptionNew context:0];
}
-(void)dealloc{
[self removeObserver:self forKeyPath:@"highlighted"];
}
@end
BTY:我不建议覆盖类别中的方法。
将色调颜色设置为相同的颜色不会导致调用 tintColorDidChange
。
我尝试实现我的 UIButton 类别,以便按钮实例可以具有预定义的属性,如边框颜色、边框角等。这是我设置按钮的代码我的类别的 .m 文件:
-(void)buttonForMe {
[[self layer] setCornerRadius:2];
[[self layer] setBorderColor:self.tintColor.CGColor];
[[self layer] setBorderWidth:1];
}
正如您在第二行看到的那样,我将 borderColor 设置为 tintColor,这样当用户触摸按钮时,边框也会像文本一样淡化。 但是没有用。。我四处搜索 Tintcolor in custom border of UIButton 并按照答案进行搜索,但 它也没有用 。
-(void)tintColorDidChange {
[super tintColorDidChange];
[self setNeedsDisplay];
NSLog(@"color changed");
}
我发现上面的方法从来没有被调用过,尽管我的按钮文本的颜色在我按下时确实发生了变化。只是不知道为什么那个方法从未被调用过?是因为我实现的是类别而不是 UIButton 的子类吗? 谢谢
用你的代码试试这个。
btnObj.clipsToBounds = YES;
我用KVO监控tintColor得到了nothing.So,我认为tintColorDidChange没有被调用的原因是点击时tintColor没有改变。 如果你想让你的层在点击时淡出,你可以创建UIButton的子类,然后使用KVO。
示例代码:
@implementation CustomButton
-(instancetype)init{
if (self = [super init]) {
[self setUp];
}
return self;
}
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super initWithCoder:aDecoder]) {
[self setUp];
}
return self;
}
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
[self setUp];
}
return self;
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSNumber * newValue = [change objectForKey:NSKeyValueChangeNewKey];
if (newValue.boolValue) {
self.layer.opacity = 0.3;
}else
{
self.layer.opacity = 1.0;
}
}
-(void)setUp{
[[self layer] setCornerRadius:2];
[[self layer] setBorderColor:self.tintColor.CGColor];
[[self layer] setBorderWidth:1];
[self addObserver:self forKeyPath:@"highlighted" options:NSKeyValueObservingOptionNew context:0];
}
-(void)dealloc{
[self removeObserver:self forKeyPath:@"highlighted"];
}
@end
BTY:我不建议覆盖类别中的方法。
将色调颜色设置为相同的颜色不会导致调用 tintColorDidChange
。