Подтвердить что ты не робот

Изменение фона текстового поля UISearchBar

Я боюсь с этим какое-то время. Обыскали везде, но решение предоставлялось только с 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 имеет cornerRadius, скажем, 15.

Как я могу это сделать?

Большое спасибо заранее

4b9b3361

Ответ 1

Вам нужно получить доступ к UITextField внутри UISearchBar. Вы можете это сделать используя valueForKey("searchField")

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

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

там вы можете изменить любые параметры, такие как textColor или backgroundColor UITextField

Ответ 2

В Swift 3:

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

Ответ 3

Добавление к приведенному выше ответу. Если вы хотите сохранить стиль строки поиска UISearchBarStyleMinimal и изменить фон текстового поля UISearchBar, установите для параметра textField borderStyle значение UITextBorderStyleNone

Цель C:

self.searchBar.searchBarStyle = UISearchBarStyleMinimal;

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

Ответ 4

Добавьте расширение к 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