【发布时间】:2018-04-17 08:09:20
【问题描述】:
如何更改仅文本字段的背景颜色? (下图中为红色)
如果使用下面的代码将背景颜色设置为白色,则顶部填充不足
searchController.searchBar.backgroundColor = UIColor.white
【问题讨论】:
标签: ios swift uisearchcontroller searchbar
如何更改仅文本字段的背景颜色? (下图中为红色)
如果使用下面的代码将背景颜色设置为白色,则顶部填充不足
searchController.searchBar.backgroundColor = UIColor.white
【问题讨论】:
标签: ios swift uisearchcontroller searchbar
请尝试使用此方法更改搜索栏中文本字段的背景颜色。
我们有很多方法可以做到这一点:
第一种方式:
extension UISearchBar {
private func getViewElement<T>(type: T.Type) -> T? {
let svs = subviews.flatMap { $0.subviews }
guard let element = (svs.filter { $0 is T }).first as? T else { return nil }
return element
}
func setTextFieldColor(color: UIColor) {
if let textField = getViewElement(type: UITextField.self) {
switch searchBarStyle {
case .minimal:
textField.layer.backgroundColor = color.cgColor
textField.layer.cornerRadius = 6
case .prominent, .default:
textField.backgroundColor = color
}
}
}
}
如何使用
searchBar.setTextFieldColor(color: UIColor.green.withAlphaComponent(0.3))
第二种方式:你可以像这样从搜索栏获取文本字段并直接更改颜色:
在 Swift 中
for subView: UIView? in searchBar.subviews {
for field: Any? in subView?.subviews ?? [Any?]() {
if (field is UITextField) {
var textField = field as? UITextField
textField?.backgroundColor = UIColor.gray
}
}
}
在 Obj-c 中
for (UIView *subView in _searchBar.subviews) {
for(id field in subView.subviews){
if ([field isKindOfClass:[UITextField class]]) {
UITextField *textField = (UITextField *)field;
[textField setBackgroundColor:[UIColor grayColor]];
}
}
}
【讨论】:
首先你需要下面的搜索栏扩展:
extension UISearchBar {
/// Return text field inside a search bar
var textField: UITextField? {
guard let text = self.value(forKey: "searchField") as? UITextField else {
return nil
}
return text
}
}
然后在你的视图控制器:
searchBar.textField?.backgroundColor = .red
【讨论】:
在斯威夫特中:
var textField = searchBar.valueForKey("searchField") as? UITextField
textField?.backgroundColor = UIColor.red // Change as per your requirement
【讨论】: