TintColorを変更せずにUisearchBarのカーソル色を変更します
-
20-12-2019 - |
質問
私の検索バーの色合い色を白くすることができます(キャンセルボタンは白くなることを意味します)。色合い色が白のときにカーソルは見えません。カーソル色を別々に設定する方法はありますか?
解決
引っぱい色をカラーに設定して、 uiappearanceプロトコルテキストフィールドの色合い色を変更するには、カーソルを作成したい色になる色になります。EX:
[self.searchBar setTintColor:[UIColor whiteColor]];
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor darkGrayColor]];
. 他のヒント
あなたが機能していますが、それでも厄介な一人のライナーが賢明であるならば、私はこれにループダウンのためのベンジャミンを手に入れました:
searchController.searchBar.tintColor = UIColor.whiteColor()
searchController.searchBar.subviews[0].subviews.flatMap(){ $0 as? UITextField }.first?.tintColor = UIColor.blueColor()
. SWIFT 3.0および4バージョン
searchController.searchBar.tintColor = .white
UITextField.appearance(whenContainedInInstancesOf: [type(of: searchController.searchBar)]).tintColor = .black
.
検索バーはオプションではありません。
COMPACT SWIFT 2.0ソリューション 構文(ループを破る必要はありません):
// Make SearchBar's tint color white to get white cancel button.
searchBar.tintColor = UIColor.white()
// Loop into it's subviews and find TextField, change tint color to something else.
for subView in searchBar.subviews[0].subviews where subView.isKindOfClass(UITextField) {
subView.tintColor = UIColor.darkTextColor()
}
. searchBar.tintColor = [UIColor whiteColor];
searchBar.backgroundColor = [UIColor clearColor];
for ( UIView *v in [searchBar.subviews.firstObject subviews] )
{
if ( YES == [v isKindOfClass:[UITextField class]] )
{
[((UITextField*)v) setTintColor:[UIColor blueColor]];
break;
}
}
.
href="https://i.stack.imgur.com/dzox6.png" rel="noreferrer">
これは私と同様に私のために働くように見えた。
searchController.searchBar.tintColor = UIColor.whiteColor()
UITextField.appearanceWhenContainedInInstancesOfClasses([searchController.searchBar.dynamicType]).tintColor = UIColor.blackColor()
. スウィフトで同じことを見ている人のために、ここに私がたくさんのトラブルが発生した後の解決策です:
override func viewWillAppear(animated: Bool) {
self.searchBar.tintColor = UIColor.whiteColor()
let view: UIView = self.searchBar.subviews[0] as! UIView
let subViewsArray = view.subviews
for (subView: UIView) in subViewsArray as! [UIView] {
println(subView)
if subView.isKindOfClass(UITextField){
subView.tintColor = UIColor.blueColor()
}
}
}
. 次のコードでUisearchBarに拡張子を追加するだけです。
extension UISearchBar {
var cursorColor: UIColor! {
set {
for subView in self.subviews[0].subviews where ((subView as? UITextField) != nil) {
subView.tintColor = newValue
}
}
get {
for subView in self.subviews[0].subviews where ((subView as? UITextField) != nil) {
return subView.tintColor
}
// Return default tintColor
return UIColor.eightBit(red: 1, green: 122, blue: 255, alpha: 100)
}
}
}
. IOS 9以上
キャンセルボタンとTextFieldで異なるTintColorを設定する最も簡単な方法では、これを使用します。
[self.searchBar setTintColor:[UIColor whiteColor]];
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:UIColor.blueColor];
. これは最も簡単な解決策です。
let textField = self.searchBar.value(forKey: "searchField") as! UITextField
textField.tintColor = UIColor.white
. Swift 5:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).tintColor = .black
. ここにフェリペの回答の「機能的な」バージョン(Swift 4.2)
// Make SearchBar's tint color white to get white cancel button.
searchBar.tintColor = .white
// Get the TextField subviews, change tint color to something else.
if let textFields = searchBar.subviews.first?.subviews.compactMap({ $0 as? UITextField }) {
textFields.forEach { $0.tintColor = UIColor.darkGray }
}
. 所属していません StackOverflow