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

这可能吗?


当前回答

斯威夫特4

在viewDidLoad()中只调用下面的代码:

代码示例

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()

其他回答

如果UITextField来自UISearchBar,那么首先从searchBar获得textField,然后应用tintColor属性:

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
yourTextField.tintColor = [UIColor whiteColor];

如果你在代码中设置它,它就会工作,因为在Interface Builder (Xcode 6.1.1)中,不知为何颜色触发器不会这样做。它非常适合,不需要更改任何外观代理。

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

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

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

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

杜格什的方法确实有效。

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

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

如果你的目标系统是iOS 7+,这就简单多了。简单地改变tintColor字段的游标使用外观代理,它将应用于整个应用程序:

斯威夫特3.0:

UITextField.appearance().tintColor = .black 

objective - c:

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

同样的答案适用于一个单独的UITextField:

斯威夫特3.0:

myTextField.tintColor = .black 

objective - c

[myTextField setTintColor:[UIColor blackColor]];