web-dev-qa-db-ja.com

UISearchBarのtextFieldの背景を変更する

私はしばらくこれに苦労しています。あらゆる場所を検索しましたが、提供されたソリューションは、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自体に、たとえば15のcornerRadiusを設定することです。

これどうやってするの?

どうもありがとうございました

19
Patrick Bassut

UISearchBar内のUITextFieldにアクセスする必要があります。 valueForKey("searchField")を使用してそれを行うことができます

var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField

textFieldInsideSearchBar?.textColor = yourcolor
textFieldInsideSearchBar?.backgroundColor = backgroundColor
...

そこで、UITextFieldのtextColorやbackgroundColorなどのパラメータを変更できます。

28
helgetan

Swift 3:

if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField {
        txfSearchField.borderStyle = .none
        txfSearchField.backgroundColor = .lightGray
    }
16
Tuslareb

上記の答えに追加します。検索バーのスタイルUISearchBarStyleMinimalを保持し、UISearchBarのtextFieldの背景を変更する場合は、textFieldのborderStyleをUITextBorderStyleNoneに設定します。

目標C:

self.searchBar.searchBarStyle = UISearchBarStyleMinimal;

UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
    txfSearchField.borderStyle = UITextBorderStyleNone;
    txfSearchField.backgroundColor = yourColor;
9
dreamer.psp

searchController.searchBar.searchTextField.backgroundColor = UIColor.white searchController.searchBar.searchTextField.textColor = UIColor.black

0
prudhvireddy

拡張機能を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
0
Daniel Storm