Как изменить цвет кнопки "Отмена" на UISearchBar в Swift

Я добавил 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)

И в раскадровке я установил:

введите описание изображения здесь

И, наконец, чтобы сделать placeholder и текст белым внутри 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()

        }

    }

}

Спасибо за любую помощь!:)

Ответ 1

Посмотрев вокруг, я понял, что это лучший способ добиться того, что мне нужно:

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

Ответ 2

Используйте эту одну строку в коде для изменения цвета кнопки отмены:

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

Проверено в Xcode 9.2 с Swift 4.0

Ответ 3

Основа на коде Nick89, я изменил это для Swift 3.1

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

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

Я хочу изменить только на UISearchBar, а не на все UIBarButton, поэтому я использую как UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])

Ответ 4

Вы пытались   UISearchBar.appearance(). TintColor = UIColor.whiteColor()

Ответ 5

Swift 4.2

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

Ответ 6

Версия 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)

Ответ 7

С инструментарием Swift 4.0 RELEASE 2017-09-19 это сработало:

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

Ответ 8

Я знаю, что на этот вопрос достаточно ответов, но здесь есть простой способ добиться этого, используя цвет фона SearchBar и цвет фона кнопки "Отмена", мы можем изменить его непосредственно в инспекторе атрибутов раскадровки.

для цвета фона панели поиска

enter image description here

для кнопки отмены SearchBar цвет

enter image description here

Ответ 9

Все приведенные выше ответы не спомогли мне. (Получил 'Type' NSAttributedString.Key '(он же' NSString ') не имеет члена' foregroundColor '' ошибка)

Может быть, потому что я на Свифте 3...

Вот немного измененный код, который работал для меня: -

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

Примечание: -

Если вы используете UISearchController, вставьте этот код в willPresentSearchController: или didPresentSearchController:

Ответ 11

Swift 4.2, 4.1

Пользовательский класс, добавленный здесь, можно использовать для настройки наиболее распространенных элементов в панели поиска. Пользовательский класс SearchBar может привести к следующей строке поиска.

enter image description here