8

在 iOS 7 中,更改 uitextfield 的 'tint color' 属性会更改该文本字段的光标颜色。在 iOS 8 中,即使我更改了全局故事板色调,也不会发生这种情况(objective-c,在 iOS 7 中仍然有效)。我该如何解决?

4

3 回答 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 回答