web-dev-qa-db-ja.com

SwiftでUISearchBarの「キャンセル」ボタンの色を変更する方法

UISearchBarの先頭にPFQueryTableViewControllerを追加しました。 searchBarの色をアプリの色に変更しましたが、これを行うと、その右側の[キャンセル]ボタンの色も同じ色に変更されたようです。理想的には、色を白にしたいです。

この画像は、現在の外観を示しています。

「キャンセル」ボタンはないように見えますが、searchBarと同じ色があります(まだ押すことができます)。

この[キャンセル]ボタンの色を白に変更する方法はありますか?私が試したすべてが違いはないようです。

UISearchBarをこの色にするために使用したコード:

UISearchBar.appearance().barTintColor = UIColor(hue: 359/360, saturation: 67/100, brightness: 71/100, alpha: 1)
UISearchBar.appearance().tintColor = UIColor(hue: 359/360, saturation: 67/100, brightness: 71/100, alpha: 1)

そして、ストーリーボードでこれらを設定しました:

enter image description here

そして最後に、プレースホルダーとSearchBar内のテキストを白にするために、私は使用しました:

for subView in self.filmSearchBar.subviews {

    for subsubView in subView.subviews {

        if let searchBarTextField = subsubView as? UITextField {

            searchBarTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Search Cinevu film reviews", comment: ""), attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])

            searchBarTextField.textColor = UIColor.whiteColor()

        }

    }

}

助けてくれてありがとう! :)

21
Nick89

周りを見て、これは私が必要なものを達成するための最良の方法であるように見えました:

 let cancelButtonAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
 UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes , for: .normal)
27
Nick89

コードで次の1行を使用して、キャンセルボタンの色を変更します。

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue): UIColor.white], for: .normal)

Xcode 9.2でSwift 4.0でチェックイン

12
Incredible_Dev

Nick89のコードに基づいて、Swift 3.1のように変更しました

_let cancelButtonAttributes: [String: AnyObject] = [NSForegroundColorAttributeName: UIColor.white]

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)
_

すべてのUIBarButtonではなくUISearchBarのみを変更したいので、UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])のように使用しています

11
saturngod

uISearchBar.appearance()。tintColor = UIColor.whiteColor()を試しましたか

8
David Yang Liu

Swift 4.2

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.black], for: .normal)
5
Abhishek Jain

Swift 4.2バージョン、他の回答に基づく:

let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.orange]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)
4
Matt

Swift 4.0リリース2017-09-19ツールチェーンでは、これは機能しました:

    let cancelButtonAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)
3
Tino

この質問には十分な答えがありますが、ここでは簡単な方法、SearchBar背景色とキャンセルボタン背景色を使用して、ストーリーボードの属性インスペクターで直接変更できます。

searchBarの背景色用

enter image description here

searchBarのキャンセルボタンの色

enter image description here

2
Ram

SearchBarのtintcolorを設定するだけで、キャンセルボタンの色を変更できます。 Swift 4であるため、トリックを行う必要があります。

let searchBar = UISearchBar(frame: )
searchBar.tintColor = .orange

検索バーのキャンセルボタンとカーソルの色の変更

0

上記のすべての答えは私にはうまくいきませんでした。 (Got 'Type' NSAttributedString.Key '(別名' NSString ')にはメンバー' foregroundColor 'エラーがありません)

多分、私はSwift 3 ...

私のために働いたわずかに変更されたコードは次のとおりです:

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSForegroundColorAttributeName : .black], for: .normal)

注意:-

UISearchControllerを使用している場合は、このコードを「willPresentSearchController:」または「didPresentSearchController:」に挿入します

0
Lok SN