Change UITextField and UITextView Cursor / Caret Color
If you're targeting iOS 7+, this has been made much easier. Simply change the tintColor
of the field with a cursor using the appearance proxy and it will apply throughout the app:
Swift 3.0:
UITextField.appearance().tintColor = .black
Objective-C:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
Same answer applies for an individual UITextField
:
Swift 3.0:
myTextField.tintColor = .black
Objective-C
[myTextField setTintColor:[UIColor blackColor]];
With iOS7 you can simply change tintColor of the textField
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
yourTextField.tintColor = [UIColor whiteColor];
It works if you set it in code, 'cos somehow color trigger doesn't do it in the Interface Builder (Xcode 6.1.1). It suited well without a need to change any appearance proxy.
Note: This answer is out of date and should be used for pre-iOS 7 development only. See other answers for a 1 line solution using the appearance proxy in iOS 7.
I arrived at this question after I faced the same problem in a project I was working on.
I managed to create a solution that will be accepted by the AppStore review team as it does not use any existing Private APIs.
I have created a control called DGTextField that extends UITextField.