私はしばらくこれに苦労しています。あらゆる場所を検索しましたが、提供されたソリューションは、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 ";
}
これは私に奇妙な結果を与えます:
私が欲しいのは、UISearchBar内のテキストフィールドに白い背景を設定し、SearchBar自体に、たとえば15のcornerRadiusを設定することです。
これどうやってするの?
どうもありがとうございました
UISearchBar内のUITextFieldにアクセスする必要があります。 valueForKey("searchField")
を使用してそれを行うことができます
var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
textFieldInsideSearchBar?.backgroundColor = backgroundColor
...
そこで、UITextFieldのtextColorやbackgroundColorなどのパラメータを変更できます。
Swift 3:
if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField {
txfSearchField.borderStyle = .none
txfSearchField.backgroundColor = .lightGray
}
上記の答えに追加します。検索バーのスタイルUISearchBarStyleMinimalを保持し、UISearchBarのtextFieldの背景を変更する場合は、textFieldのborderStyleをUITextBorderStyleNoneに設定します。
目標C:
self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
txfSearchField.borderStyle = UITextBorderStyleNone;
txfSearchField.backgroundColor = yourColor;
searchController.searchBar.searchTextField.backgroundColor = UIColor.white searchController.searchBar.searchTextField.textColor = UIColor.black
拡張機能を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