我想知道在iOS中改变UITextField(和UITextView如果答案相同)中的光标/插入符号的颜色。我看到过OSX开发的答案,但没有iOS的答案。

这可能吗?


当前回答

注意:这个答案已经过时了,应该只用于ios 7之前的开发。查看iOS 7中使用外观代理的1行解决方案的其他答案。

我是在一个项目中遇到同样的问题后想到这个问题的。

我设法创建了一个解决方案,它将被AppStore审查团队接受,因为它不使用任何现有的私有api。

我已经创建了一个名为DGTextField扩展UITextField控件。

其他回答

试试,这对我很有用。

[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];

杜格什的方法确实有效。

我也多次使用这样的KVC解决方案。 尽管它似乎没有证件,但它是有效的。坦白地说,你什么都不用 private方法-只有键值编码,这是合法的。

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

这在swift中很管用:

UITextField.tintColor = UIColor.blackColor()

你也可以在storyboard中设置:https://stackoverflow.com/a/18759577/3075340

一个更通用的方法是设置UIView的外观的tintColor。

UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];

如果您使用许多默认UI元素,这是有意义的。

为UITextField和UITextView设置tintColor的工作方式不同。 虽然对于UITextField,你不需要在更新tintColor后调用额外的代码来改变光标的颜色,但对于UITextView,你需要。

所以在设置tintColor为UITextView(这并不重要在IB或在代码),你需要调用textView.tintColorDidChange(),以应用它(实际上它将通过文本视图的配置下到它的子视图层次结构)。