Как изменить цвет текста PlaceHolder в UISearchBar? (iOS 13) - PullRequest
3 голосов
/ 08 октября 2019

После поиска обновленных ( iOS 13 ) ответов я не нашел решений этой простой проблемы:Как изменить textColor заполнителя в UISearchBar?

Мое приложение не поддерживает режим Light/Dark,Я не хочу, чтобы система меняла мой UIPlaceHolder цвет текста. Я хочу, чтобы он всегда был white.


    if #available(iOS 13.0, *) {
        let attrString = NSMutableAttributedString(string: "My PlaceHolder")
        attrString.addAttributes([NSAttributedString.Key.foregroundColor: UIColor.white], range: NSRange(location: 0, length: attrString.length))
        searchController.searchBar.searchTextField.attributedPlaceholder = attrString
    }

Я ожидал, что этот код будет работать. Я думал, что новое свойство searchTextField упростит настройку моего UISearchBar.

РЕДАКТИРОВАТЬ:

Этот код работает в viewDidAppearМетод:

if #available(iOS 13.0, *) {
     searchController.searchBar.searchTextField.attributedPlaceholder = NSAttributedString(string: "My PlaceHolder", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white.withAlphaComponent(0.80)])
 }

Проблема в том, что цвет меняется при прокрутке вверх и вниз.

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Я думаю, причина, по которой это не работает, вероятно, searchController.searchBar.searchTextField = nil, который вы получили.

searchTextField - это новое свойство для iOS 13, которое может быть выполнено, если вы поддерживаете только >= iOS 13. Если вы хотите адаптироваться к предыдущей версии iOS 13, вы можете пройти UISearchBar, чтобы найти UISearchBarTextField и напрямую установить найденный UISearchBarTextField.

Код, который я посмотрел, вероятно, выглядит следующим образом:Я поместил его в Category из UIView.

- (UIView *)findChildViewClass:(Class)childViewClass fromView:(UIView *)fromView{
    for (UIView *subView in fromView.subviews) {
        if ([subView isMemberOfClass:childViewClass]) {
            return subView;
        }
        UIView *finalView = [self findChildViewClass:childViewClass fromView:subView];
        if (finalView) {
            return finalView;
        }else{
            continue;
        }
    }
    return nil;
}

При использовании вы можете настроить свойство searchTextField для наследования от UITextField, чтобы сохранить найденное значение.

_searchTextField = (UITextField *)[searchBar findChildViewClass:NSClassFromString(@"UISearchBarTextField") fromView: searchBar];

Это то, чем я сейчас пользуюсь, оно работает, надеюсь, будет полезно для вас.

0 голосов
/ 08 октября 2019

Вы можете установить это с помощью свойства UITextField appearance. проверьте эту строку кода

 UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...