更改 UITextField 中光标的颜色

Posted

技术标签:

【中文标题】更改 UITextField 中光标的颜色【英文标题】:Change color of cursor in UITextField 【发布时间】:2011-01-12 12:26:43 【问题描述】:

如何更改 UITextField 中光标的颜色?

【问题讨论】:

您需要澄清您使用的是 Cocoa 还是 Cocoa touch。您可以通过在问题中输入实际的类名来明确这一点。 【参考方案1】:

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

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

textField.tintColor = [UIColor redColor];

...

在 Swift 4 中:

textField.tintColor = UIColor.red

...或在界面生成器中:

您也可以使用UITextField 外观代理对应用中的所有文本字段执行此操作:

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

在 Swift 4 中:

UITextField.appearance().tintColor = UIColor.red

下面是模拟器屏幕截图,显示了一个普通的 iOS 7 文本字段在其色调设置为红色时的样子。

文本光标截图:

文本选择截图:

【讨论】:

奇怪的是,如果您在界面生成器中设置它,它就不起作用:我怀疑显示的项目是针对 UIView 本身的,“不是”文本字段本身。 与@Joe Blow 相同,仅当您以编程方式设置它时才有效。此外,它也不能在模拟器上运行,只能在真实设备上运行。奇怪【参考方案2】:

在 iOS 中,UITextfield 有一个 textInputTraits 属性。 UITextInputTraits 的私​​有属性之一是insertionPointColor

因为它是一个未记录的属性,设置自定义颜色可能会导致您的应用被 App Store 拒绝。如果这不是问题,这应该可以:

[[addNewCategoryTextField textInputTraits] setValue:[UIColor redColor]
                                             forKey:@"insertionPointColor"];

【讨论】:

如果是无证(私有),那么你几乎肯定会被苹果拒绝。 这在 iOS 6 中效果很好。在 iOS 7 中使用 tint 颜色。如果应用程序被拒绝,我会通知您,但其他人使用此技巧没有问题。 我的应用没有因为使用这个而被拒绝。然而,在 iOS 10 中,此解决方案会导致崩溃,因为 insertionPointColor 特征已被删除。 不要再使用这个解决方案了!【参考方案3】:
[[self.searchTextField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] forKey:@"insertionPointColor"];

【讨论】:

【参考方案4】:

如果你在 Mac OS X 上开发,那么你可以试试@987654321@ 方法。有关详细信息,请参阅NSTextView 参考。

【讨论】:

是的,我尝试使用 as:[addNewCategoryTextField setInsertionPointColor:[UIColor redColor]];但我收到警告为:UITextField 可能无法响应 -setInsertionPointColor 当我使用函数时:[addNewCategoryTextField setInsertionPointColor:[NSColor redColor]];由于 NSColor 未在函数中声明使用,因此会产生错误。 这是我回答的一部分:此消息仅适用于 Mac OS X,不适用于 iPhone。在您的问题中,您没有指定您正在开发的平台。所以我假设它是 Mac OS X... 如果您使用的是 UITextField 对象,则不是。那只是 iPhone SDK。【参考方案5】:

Durgesh 的方法确实有效。

我也多次使用过这样的KVC方案。 尽管它似乎没有记录,但它确实有效。坦率地说,你不使用任何 这里的私有方法——只有合法的键值编码。

它与 [addNewCategoryTextField textInputTraits] 截然不同。

附:昨天我的新应用程序出现在 AppStore 上,这种方法没有任何问题。当我使用 KVC 更改一些只读属性(如 navigatonBar)或私有 ivars 时,这不是第一种情况。

【讨论】:

@Sathish 事实上,这是一个答案!如果他发表评论值得吗?【参考方案6】:

要将整个应用程序中的cursorcolor更改为UITextField/UITextView,也可以使用外观代理,如下所示,

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

【讨论】:

以上是关于更改 UITextField 中光标的颜色的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中设置UITextField的占位文字的颜色,和光标的颜色

UITextField 占位符的颜色及光标颜色(及如何学习新知识)

如何更改 iPhone 中 UITextField 的颜色?

文本编辑框光标颜色和占位文字颜色自定义

如何更改搜索控制器中的 uitextfield 颜色?

如何更改 UITextField 的占位符颜色?