更改UITextField和UITextView光标/插入颜色

时间:2012-07-23 03:09:44

标签: ios colors uitextfield cursor uitextview

我想知道在iOS中更改UITextField(和UITextView,如果它的答案相同)中光标/插入符的颜色。我已经看到了OSX开发的答案,但对iOS来说没什么。

这甚至可能吗?

14 个答案:

答案 0 :(得分:472)

如果你的目标是iOS 7+,那么这一过程就变得容易了。只需使用外观代理使用光标更改字段的tintColor,它将应用于整个应用程序:

Swift 3.0:

UITextField.appearance().tintColor = .black 

目标-C:

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

相同的答案适用于单个UITextView:

Swift 3.0:

myTextField.tintColor = .black 

目标-C

[myTextField setTintColor:[UIColor blackColor]];

答案 1 :(得分:43)

使用iOS7,您只需更改textField的tintColor

即可

答案 2 :(得分:18)

斯威夫特3:

  UITextField.appearance().tintColor = UIColor.black
  UITextView.appearance().tintColor = UIColor.black

答案 3 :(得分:13)

注意:此答案已过期,仅适用于iOS 7之前的开发。请参阅iOS 7中使用外观代理的1行解决方案的其他答案。

在我正在处理的项目中遇到同样的问题后,我得到了这个问题。

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

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

答案 4 :(得分:6)

from flask import Flask, request, Response, json import base64 app = Flask(__name__) @app.route('/test', methods=['GET','POST']) def route(): open_read = open('my_file.zip').read() encoded = base64.b64encode(open_read) dict_data = {'str': str(), 'list': list(), 'dict': dict(), 'encoded': encoded} return Response(json.dumps(dict_data), mimetype='text/plain') if __name__ == '__main__': app.run('0.0.0.0', 5000) response = requests.post('http://127.0.0.1:5000/test') response_json = response.json() encoded = response_json['encoded'] decoded = base64.b64decode(encoded) dst_filepath = "my_zip.zip" with open(dst_filepath, 'w') as _file: _file.write(decoded) 设置tintColor的工作方式不同。 对于UITextField而言,您无需在更新UITextView后更改其他颜色来调用其他代码,但对于UITextField则需要。

因此,将tintColor设置为UITextView(在IB或代码中都没有关系)之后,您需要调用tintColor才能应用它(实际上它将通过文本视图的配置到其子视图层次结构。

答案 5 :(得分:4)

这对我来说非常有用:

UITextField.tintColor = UIColor.blackColor()

您也可以在故事板中设置:https://stackoverflow.com/a/18759577/3075340

答案 6 :(得分:3)

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

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

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

答案 7 :(得分:1)

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

take a look at this Stackoverflow question

答案 8 :(得分:1)

尝试,它为我工作。

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

答案 9 :(得分:0)

Durgesh的方法确实有效。

我也多次使用过这样的KVC解决方案。 尽管它似乎没有文档,但它的工作原理。坦白说,你不要使用任何 这里的私有方法 - 只有合法的键值编码。

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

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

雨燕4

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

代码示例

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()

答案 12 :(得分:0)

我认为,如果需要一些自定义颜色,则可以转到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上进行了测试

答案 13 :(得分:0)

对于在SwiftUI中搜索Textfield的用户来说,这是accentColor

TextField("Label", text: $self.textToBind).accentColor(Color.red)