239

我想知道在iOS中更改光标/插入符号的颜色UITextFieldUITextView如果它的答案相同)。我已经看到了 OSX 开发的答案,但没有看到 iOS 的答案。

这甚至可能吗?

4

16 回答 16

553

如果您的目标是 iOS 7+,这会变得容易得多。只需使用外观代理使用光标更改tintColor字段的 ,它将应用于整个应用程序:

斯威夫特 3.0:

UITextField.appearance().tintColor = .black 

目标-C:

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

同样的答案适用于个人UITextField

斯威夫特 3.0:

myTextField.tintColor = .black 

Objective-C

[myTextField setTintColor:[UIColor blackColor]];
于 2013-09-22T16:10:57.520 回答
44

使用 iOS7,您可以简单地更改 textField 的 tintColor

于 2013-09-12T08:51:26.373 回答
22

斯威夫特 3:

  UITextField.appearance().tintColor = UIColor.black
  UITextView.appearance().tintColor = UIColor.black
于 2015-03-12T20:15:21.393 回答
14
yourTextField.tintColor = [UIColor whiteColor];

如果您在代码中设置它,它会起作用,因为在 Interface Builder (Xcode 6.1.1)中颜色触发器无法做到这一点。它非常适合,无需更改任何外观代理。

于 2015-04-30T13:25:16.807 回答
13

注意:此答案已过时,应仅用于 iOS 7 之前的开发。在 iOS 7 中使用外观代理查看 1 行解决方案的其他答案。

在我正在从事的项目中遇到同样的问题后,我提出了这个问题。

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

我创建了一个名为 DGTextField 的控件,它扩展了 UITextField。

于 2013-01-21T12:37:58.590 回答
13

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

因此,在设置后tintColorUITextView在 IB 或代码中无关紧要),您需要调用textView.tintColorDidChange()才能应用它(实际上它会将文本视图的配置向下传递到其子视图层次结构)。

于 2018-11-16T05:55:16.817 回答
4

这对我来说很快:

UITextField.tintColor = UIColor.blackColor()

您也可以在情节提要中进行设置:https ://stackoverflow.com/a/18759577/3075340

于 2016-06-08T02:14:02.850 回答
3

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

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

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

于 2013-10-04T14:38:33.177 回答
2

试试看,它对我有用。

[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
于 2013-06-07T10:24:23.703 回答
1

只有通过访问私有属性才有可能,因此可能会导致 Apple AppStore 应用程序被拒绝。

看看这个 Stackoverflow 问题

于 2012-09-23T13:01:19.593 回答
1

我想如果你想要一些自定义颜色,你可以去Assets.xcassets文件夹,右键单击并选择New Color Set,一旦你创建了你设置的颜色,给它一个名称以重复使用它。

你可以像这样使用它:

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 上测试

于 2019-08-02T12:23:55.753 回答
1

对于在 SwiftUI 中搜索等效项的人Textfield来说accentColor

TextField("Label", text: $self.textToBind).accentColor(Color.red)
于 2020-05-28T01:43:53.213 回答
0

Durgesh 的方法确实有效。

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

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

于 2013-09-16T18:41:57.610 回答
0

对于带有 Swift 的 Interface Builder 版本

@IBOutlet weak var tvValue: UITextView! {
        didSet {
            tvValue.tintColor = .black
        }
    }
于 2018-03-03T06:48:05.590 回答
0

如果UITextField是 fromUISearchBar那么首先获取textFieldfromsearchBar然后应用tintColor属性:

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
于 2018-08-22T05:45:35.307 回答
0

斯威夫特 4

在 viewDidLoad() 中只需调用以下代码:

代码示例

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()
于 2019-02-21T08:47:00.673 回答