我想知道在iOS中更改光标/插入符号的颜色UITextField
(UITextView
如果它的答案相同)。我已经看到了 OSX 开发的答案,但没有看到 iOS 的答案。
这甚至可能吗?
我想知道在iOS中更改光标/插入符号的颜色UITextField
(UITextView
如果它的答案相同)。我已经看到了 OSX 开发的答案,但没有看到 iOS 的答案。
这甚至可能吗?
如果您的目标是 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]];
使用 iOS7,您可以简单地更改 textField 的 tintColor
斯威夫特 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
yourTextField.tintColor = [UIColor whiteColor];
如果您在代码中设置它,它会起作用,因为在 Interface Builder (Xcode 6.1.1)中颜色触发器无法做到这一点。它非常适合,无需更改任何外观代理。
注意:此答案已过时,应仅用于 iOS 7 之前的开发。在 iOS 7 中使用外观代理查看 1 行解决方案的其他答案。
在我正在从事的项目中遇到同样的问题后,我提出了这个问题。
我设法创建了一个将被 AppStore 审查团队接受的解决方案,因为它不使用任何现有的私有 API。
我创建了一个名为 DGTextField 的控件,它扩展了 UITextField。
设置和tintColor
工作方式不同。虽然你不需要在更新后调用额外的代码来改变光标颜色,但你需要。UITextField
UITextView
UITextField
tintColor
UITextView
因此,在设置后tintColor
(UITextView
在 IB 或代码中无关紧要),您需要调用textView.tintColorDidChange()
才能应用它(实际上它会将文本视图的配置向下传递到其子视图层次结构)。
这对我来说很快:
UITextField.tintColor = UIColor.blackColor()
您也可以在情节提要中进行设置:https ://stackoverflow.com/a/18759577/3075340
更通用的方法是设置 UIView 的外观 tintColor。
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
如果您使用许多默认 UI 元素,这很有意义。
试试看,它对我有用。
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
只有通过访问私有属性才有可能,因此可能会导致 Apple AppStore 应用程序被拒绝。
我想如果你想要一些自定义颜色,你可以去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 上测试
对于在 SwiftUI 中搜索等效项的人Textfield
来说accentColor
:
TextField("Label", text: $self.textToBind).accentColor(Color.red)
Durgesh 的方法确实有效。
我也多次使用过这样的 KVC 解决方案。尽管它似乎没有记录,但它确实有效。坦率地说,您在这里没有使用任何私有方法——只有合法的键值编码。
PS 昨天我的新应用出现在 AppStore 上,这种方法没有任何问题。当我使用 KVC 更改一些只读属性(如 navigatonBar)或私有 ivars 时,这不是第一种情况。
对于带有 Swift 的 Interface Builder 版本
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
如果UITextField
是 fromUISearchBar
那么首先获取textField
fromsearchBar
然后应用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()