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

这可能吗?


当前回答

我认为如果你想要一些自定义颜色,你可以去资产。xcassets文件夹,右键单击并选择新的颜色设置,一旦你创建了你的颜色设置,给它一个名字来重用它。

你可以这样使用它:

import UIKit 

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME")  #here
    }
}

在macOS 10.15 / iOS 13 / Swift 5上测试

其他回答

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

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

试试,这对我很有用。

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

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

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray

斯威夫特4

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

代码示例

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()

这只能通过访问私有财产来实现,因此可能会导致苹果AppStore应用程序被拒绝。

看看这个Stackoverflow的问题