在UITextField中更改光标颜色

41

我该如何改变UITextField中光标的颜色?


1
你需要澄清你是在使用Cocoa还是Cocoa Touch。你可以通过在问题中放置实际的类名来澄清这一点。 - uchuugaka
6个回答

99

在iOS 7中,您可以简单地更改UITextFieldtintColor属性。这将影响文本光标和文本选择突出显示颜色的颜色。

您可以在代码中执行此操作...

textField.tintColor = [UIColor redColor];

在Swift 4中:

textField.tintColor = UIColor.red

...或在Interface Builder中:

屏幕截图,展示如何在Interface Builder中修改文本字段的色调

您还可以使用UITextField外观代理同时对应用程序中的所有文本字段进行此操作:

[[UITextField appearance] setTintColor:[UIColor redColor]];

在 Swift 4 中:

UITextField.appearance().tintColor = UIColor.red

以下是模拟器截图,展示了一个普通的iOS 7文本框在色调设置为红色后的外观。

文字光标截图:

文字光标截图

文字选择截图:

文字选择截图


8
对我来说很奇怪,如果你在界面构建器中设置它,它就不起作用:我怀疑显示的项目是针对UIView本身而不是文本字段本身的。 - Fattie
1
和@Joe Blow一样,只有在程序中设置才能正常工作。而且,在模拟器上它也不能正常工作,只有在真实设备上才行。很奇怪。 - tbaranes
我无法相信这种胡言乱语被宣传成实际解决方案。这只是改变了文本字段的色调,如果不是白色,那么会修改更多内容而不仅仅是光标。请不要使用这个。 - gran_profaci

14
在iOS中,UITextfield有一个叫做textInputTraits的属性。其中UITextInputTraits的一个私有属性是insertionPointColor
由于这是一个未记录的属性,设置自定义颜色可能会导致您的应用被拒绝上架到App Store。如果这不是您关心的问题,那么以下代码应该可以解决:
[[addNewCategoryTextField textInputTraits] setValue:[UIColor redColor]
                                             forKey:@"insertionPointColor"];

如果它是未记录的(私有的),那么你几乎肯定会被苹果拒绝。 - Craig B
1
这在iOS 6中非常有效。在iOS 7中使用色调颜色。如果应用程序被拒绝,我会通知您,但其他人已经成功地使用了这个技巧。 - phatmann
2
我的应用程序并没有因为使用这个而被拒绝。然而,在iOS 10中,这个解决方案会导致崩溃,因为“insertionPointColor”特性已被移除。不要再使用这个解决方案! - Alain Stulz

6
[[self.searchTextField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] forKey:@"insertionPointColor"];

3

是的,我尝试使用以下方式: [addNewCategoryTextField setInsertionPointColor:[UIColor redColor]];但是我收到了警告:UITextField可能无法响应-setInsertionPointColor。 - monish
当我使用函数如下: [addNewCategoryTextField setInsertionPointColor:[NSColor redColor]]; 会生成一个错误,提示NSColor未在函数中声明。 - monish
1
这是我的一部分回答:这个信息只适用于Mac OS X,而不是iPhone。在你的问题中,你没有说明你正在开发的平台。所以我假设它是Mac OS X... - Laurent Etiemble
7
如果你使用的是UITextField对象,那么就不行了。这只适用于iPhone SDK。 - Rob Keniger

2

Durgesh的方法确实有效。

我也多次使用这样的KVC解决方案。尽管它似乎没有文档记录,但它确实可行。坦白说,在这里你不使用任何私有方法 - 只使用合法的键值编码。

这与[addNewCategoryTextField textInputTraits]大不相同。

P.S. 昨天我的新应用程序已经在AppStore上发布,使用这种方法没有任何问题。而且这并不是我第一次在更改一些只读属性(如navigationBar)或私有变量时使用KVC。


1
@Sathish 实际上,这是一个答案!如果他发表了评论,那会不会更有价值呢? - Paresh Mayani

0

要在整个应用程序中更改UITextField/UITextView光标颜色,可以使用外观代理,如下所示:

UITextField.appearance().tintColor = .green
UITextView.appearance().tintColor  = .green

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接