Изменение фона текстового поля UISearchBar
Я боюсь с этим какое-то время. Обыскали везде, но решение предоставлялось только с objective-c. Что состоит из
UITextField *txt = [_searchBar valueForKey:@"_searchField"];
Хотя некоторые могут сказать, что это защищенный API, и Apple может отказаться от приложения с таким кодом.
Итак, теперь я пробовал так много способов, чтобы это исправить, и он вообще не работает.
Мой код:
searchBar = UISearchBar(frame: CGRectMake(0, 0, 320.0, 30.0))
searchBar.autoresizingMask = UIViewAutoresizing.FlexibleWidth
searchBar.searchBarStyle = UISearchBarStyle.Minimal
searchBar.layer.cornerRadius = 15
searchBar.delegate = self
searchBar.backgroundColor = UIColor.whiteColor()
if floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1{
// Load resources for iOS 6.1 or earlier
searchBar.placeholder = "Search";
} else {
// The following "hack" (if we can call that) breaks the UI for different size devices.
// Load resources for iOS 7 or later
searchBar.placeholder = "Search ";
}
Это дает мне странный результат:
![enter image description here]()
В то время как я хочу только текстовое поле внутри UISearchBar иметь белый фон, а сам SearchBar имеет cornerRadius, скажем, 15.
Как я могу это сделать?
Большое спасибо заранее
Ответы
Ответ 1
Вам нужно получить доступ к UITextField внутри UISearchBar. Вы можете это сделать
используя valueForKey("searchField")
var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
textFieldInsideSearchBar?.backgroundColor = backgroundColor
...
там вы можете изменить любые параметры, такие как textColor или backgroundColor UITextField
Ответ 2
В Swift 3:
if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField {
txfSearchField.borderStyle = .none
txfSearchField.backgroundColor = .lightGray
}
Ответ 3
Добавление к приведенному выше ответу.
Если вы хотите сохранить стиль строки поиска UISearchBarStyleMinimal и изменить фон текстового поля UISearchBar, установите для параметра textField borderStyle значение UITextBorderStyleNone
Цель C:
self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
txfSearchField.borderStyle = UITextBorderStyleNone;
txfSearchField.backgroundColor = yourColor;
Ответ 4
Добавьте расширение к UISearchBar
для доступа к его UITextField
:
import UIKit
extension UISearchBar {
var textField: UITextField? {
let subViews = subviews.flatMap { $0.subviews }
return (subViews.filter { $0 is UITextField }).first as? UITextField
}
}
Затем вы можете установить его свойства так, как вы ожидаете:
searchController.searchBar.textField?.backgroundColor = .red
searchController.searchBar.textField?.tintColor = .yellow