如何更改UISearchBar
的文字颜色?
答案 0 :(得分:80)
您必须访问UISearchBar中的UITextField
。您可以使用valueForKey("searchField")
var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
Swift 3更新
let textFieldInsideSearchBar = yourSearchbar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
答案 1 :(得分:46)
答案 2 :(得分:33)
在我的Swift 4中工作:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]
Swift 4.2,IOS 12:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
答案 3 :(得分:33)
如果您只需要在深色背景上使其可读,您可以更改barStyle。以下内容使搜索栏中的文本和按钮变为白色:
searchController.searchBar.barStyle = .black
答案 4 :(得分:28)
public extension UISearchBar {
public func setTextColor(color: UIColor) {
let svs = subviews.flatMap { $0.subviews }
guard let tf = (svs.filter { $0 is UITextField }).first as? UITextField else { return }
tf.textColor = color
}
}
答案 5 :(得分:9)
我认为最方便的方法是在textColor
中设置UISearchBar
属性。
Swift 3.0
extension UISearchBar {
var textColor:UIColor? {
get {
if let textField = self.value(forKey: "searchField") as?
UITextField {
return textField.textColor
} else {
return nil
}
}
set (newValue) {
if let textField = self.value(forKey: "searchField") as?
UITextField {
textField.textColor = newValue
}
}
}
}
<强>用法强>
searchBar.textColor = UIColor.blue // Your color
Swift 2.3
extension UISearchBar {
var textColor:UIColor? {
get {
if let textField = self.valueForKey("searchField") as? UITextField {
return textField.textColor
} else {
return nil
}
}
set (newValue) {
if let textField = self.valueForKey("searchField") as? UITextField {
textField.textColor = newValue
}
}
}
}
您可以将其用作:
searchBar.textColor = UIColor.blueColor() // Your color
答案 6 :(得分:9)
这适用于iOS 11,Xcode 9:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = UIColor.blue
我在AppDelegate
中写了它,但我想如果你把它放在其他地方也可以。
答案 7 :(得分:7)
从Xcode 11和iOS 13开始,可以直接访问文本字段:
searchBar.searchTextField
您可以编写一些代码以使其始终可以像这样访问。
extension UISearchBar {
public var textField: UITextField? {
if #available(iOS 13.0, *) {
return searchTextField
}
guard let firstSubview = subviews.first else {
assertionFailure("Could not find text field")
return nil
}
for view in firstSubview.subviews {
if let textView = view as? UITextField {
return textView
}
}
assertionFailure("Could not find text field")
return nil
}
}
您也可以将其设置为非必选选项,否则会出现致命错误,此代码已从iOS 7到iOS 13GM进行了测试。但是我只会选择可选版本。
extension UISearchBar {
public var textField: UITextField {
if #available(iOS 13.0, *) {
return searchTextField
}
guard let firstSubview = subviews.first else {
fatalError("Could not find text field")
}
for view in firstSubview.subviews {
if let textView = view as? UITextField {
return textView
}
}
fatalError("Could not find text field")
}
}
答案 8 :(得分:4)
尝试一下,
searchBar.searchTextField.textColor = .white
我将其与面向iOS 11以上的应用一起使用。
[更新]
我观察到,该应用在旧版本(
答案 9 :(得分:3)
您可以通过访问searchBar中的UITextField来执行此操作, 然后你可以改变它的背景颜色,文本颜色和所有其他UITextField属性
添加以下扩展名以访问textField
app.directive('buttonRaised', function() {
return {
restrict: 'E',
template: '<button class="mdl-button" ng-class="{\'disabled\': disableButton}" ng-transclude></button>',
scope: {
disableButton: '='
},
transclude: true,
link: function($scope, el, $attrs,formCtrl) {
console.log(formCtrl)
}
};
});
答案 10 :(得分:2)
我尝试了上面写的一些解决方案,但是它们没有用(我想是了)。
如果您只想处理iOS 13:
mySearchBar.searchTextField.textColor = .red
但是如果您也想处理较旧的iOS,这就是我的方法:
创建一个名为UISearchBar
的自定义SearchBar : UISearchBar, UISearchBarDelegate
类
此SearchBar
将具有我要处理的UISearchBarDelegate
方法并设置了delegate
。
然后我添加到班级:
var textField: UITextField? {
if #available(iOS 13.0, *) {
return self.searchTextField
}
return subviews.first?.subviews.first(where: { $0 as? UITextField != nil }) as? UITextField
}
简短说明:
现在使用iOS13,由于UITextField
类型为UISearchBar.searchTextField
(继承自UISearchTextField
),您可以访问UITextField
。
由于我了解自己的层次结构,因此我知道我的textField
不会是旧版本的nill
,因此在两种情况下,我都可以轻松地自定义一个文本字段,从9开始处理每个版本到今天的13。
以下是使其正常工作所需的全部代码:
class SearchBar: UISearchBar, UISearchBarDelegate {
var textField: UITextField? {
if #available(iOS 13.0, *) {
return self.searchTextField
}
return subviews.first?.subviews.first(where: { $0 as? UITextField != nil }) as? UITextField
}
override func awakeFromNib() {
super.awakeFromNib()
delegate = self
if let textField = textField {
textField.textColor = .red
textField.clearButtonMode = .whileEditing
textField.returnKeyType = .search
}
}
}
您还可以通过在SearchBar
上添加一些自定义设置:
let searchBar = UISearchBar.appearance(whenContainedInInstancesOf: [SearchBar.self])
searchBar.backgroundImage = UIImage()
searchBar.isTranslucent = false
searchBar.returnKeyType = .search
然后将其设置到XIB /情节提要中,就像处理简单的UISearchBar
(如果您没有忘记代表们一样!),就可以对其进行处理。
答案 11 :(得分:2)
//尝试这个家伙
yourSearchbar.searchTextField.textColor = .white
答案 12 :(得分:2)
Swift 5.2和iOS 13.3.1:-
它工作正常。
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
答案 13 :(得分:1)
(此解决方案仅在Xcode 10和iOS 12上进行了测试。)添加扩展名以访问搜索栏的文本字段:
extension UISearchBar {
var textField: UITextField? {
return subviews.first?.subviews.compactMap { $0 as? UITextField }.first
}
}
然后使用该属性设置搜索栏中文本字段的文本颜色:
let searchBar = UISearchBar()
searchBar.textField?.textColor = UIColor.white // or whichever color you want
答案 14 :(得分:0)
这对我有用。
if #available(iOS 13.0, *) {
searchBar.searchTextField.textColor = .white
}
答案 15 :(得分:0)
在Swift 5中,您可以执行以下操作:
yourSearchBar.searchTextField.textColor = .yourColor
答案 16 :(得分:0)
快捷键5:
{
"tripDescription": "Some trip description...",
"justification": "Some justification...",
"country": {
"name": "BR"
}
}
答案 17 :(得分:0)
Obj-C
UITextField *textField = [self.yourSearchbar valueForKey:@"_searchField"];
textField.textColor = [UIColor redColor];
Swift 4.x
let textField = yourSearchbar.value(forKey: "searchField") as? UITextField
textField?.textColor = UIColor.red
答案 18 :(得分:0)
这里是“查找UITextField”方法的Xamarin.iOS C#版本。如果UITextField在将来的iOS视图层次结构中消失,它将不会崩溃。
var tf = searchBar.AllSubViews().FirstOrDefault(v => v is UITextField);
if (tf != null)
(tf as UITextField).TextColor = UIColor.White;
public static IEnumerable<UIView> AllSubViews(this UIView view)
{
foreach (var v in view.Subviews)
{
yield return v;
foreach (var sv in v.AllSubViews())
{
yield return sv;
}
}
}
答案 19 :(得分:0)
在我的情况下,解决方案是
id appearance = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class, BCRSidebarController.class]];
[appearance setTextColor:[UIColor.whiteColor colorWithAlphaComponent:0.56]];
答案 20 :(得分:-1)
Swift 5 Xcode 11.4 iOS 13.4
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = .white
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = .systemFont(ofSize: 13)