在 iOS 7 中,更改 uitextfield 的 'tint color' 属性会更改该文本字段的光标颜色。在 iOS 8 中,即使我更改了全局故事板色调,也不会发生这种情况(objective-c,在 iOS 7 中仍然有效)。我该如何解决?
问问题
5671 次
3 回答
12
我只是尝试复制您的问题,但是在 iOS7.1 和 iOS8 上,文本字段的 tintColor 属性都可以正常工作。
这行代码改变了 textField 的光标颜色。试试这个,而不是改变故事板中的色调
textField.tintColor = [UIColor colorWithRed:98.0/255.0f green:98.0/255.0f blue:98.0/255.0f alpha:1.0];
希望能帮助到你!
于 2014-10-02T10:00:48.610 回答
8
尝试以下操作:
[[self.textField setTintColor:[UIColor blueColor]];
[self.textField setTintAdjustmentMode:UIViewTintAdjustmentModeNormal];
于 2015-07-28T12:28:29.970 回答
0
想要在整个视图上实际放置一个有色滤色器,而不仅仅是更改光标颜色?
不要再看了。.tint
是一个蹩脚的名字,因为它绝不意味着它会调整光标颜色。自然地,谷歌搜索该.tint
属性的人可能会试图找到一种方法来在他们的 UIView、UITextView 等的整个框架/区域上应用颜色过滤器。
这是我为您提供的解决方案:
我为此目的制作了宏:
#define removeTint(view) \
if ([((NSNumber *)[view.layer valueForKey:@"__hasTint"]) boolValue]) {\
for (CALayer *layer in [view.layer sublayers]) {\
if ([((NSNumber *)[layer valueForKey:@"__isTintLayer"]) boolValue]) {\
[layer removeFromSuperlayer];\
break;\
}\
}\
}
#define setTint(view, tintColor) \
{\
if ([((NSNumber *)[view.layer valueForKey:@"__hasTint"]) boolValue]) {\
removeTint(view);\
}\
[view.layer setValue:@(YES) forKey:@"__hasTint"];\
CALayer *tintLayer = [CALayer new];\
tintLayer.frame = view.bounds;\
tintLayer.backgroundColor = [tintColor CGColor];\
[tintLayer setValue:@(YES) forKey:@"__isTintLayer"];\
[view.layer addSublayer:tintLayer];\
}
要使用,只需调用:
setTint(yourView, yourUIColor);
//Note: include opacity of tint in your UIColor using the alpha channel (RGBA), e.g. [UIColor colorWithRed:0.5f green:0.0 blue:0.0 alpha:0.25f];
删除色调时,只需调用:
removeTint(yourView);
于 2018-06-20T23:40:40.493 回答