web-dev-qa-db-fra.com

Modification de la police de texte de l'espace réservé de la barre de recherche dans Swift

J'essaie de changer la police du texte de l'espace réservé dans la barre de recherche dans mon contrôleur d'affichage de recherche. Je regardais quelques exemples et j'ai essayé de les implémenter mais comme ils sont dans Objective-C, je n'ai pas pu en trouver que je pourrais travailler.

Par exemple, j'ai essayé celui-ci:

UITextField *textField = [[searchBar subviews] objectAtIndex:1]; 
[textField setFont:[UIFont fontWithName:@"Helvetica" size:40]];

Mais je n'ai pas pu dépasser var textField: UITextField = UISearchBar

Des idées?

20
user3746428
 //SearchBar Text
    let textFieldInsideUISearchBar = dashBoardSearchBar.valueForKey("searchField") as? UITextField
textFieldInsideUISearchBar?.textColor = UIColor.whiteColor()

//SearchBar Placeholder    
     let textFieldInsideUISearchBarLabel = textFieldInsideUISearchBar!.valueForKey("placeholderLabel") as? UILabel
textFieldInsideUISearchBarLabel?.textColor = UIColor.whiteColor()
30
A.G

Il s'agit de la pratique la plus simple pour modifier la police ou toute autre modification similaire dans le champ de texte de la barre de recherche. J'utilise XCode 8.4, Swift 3.x, iOS 10.x. =

extension UISearchBar {

func change(textFont : UIFont?) {

    for view : UIView in (self.subviews[0]).subviews {

        if let textField = view as? UITextField {
            textField.font = textFont
        }
    }
} }

Le code ci-dessus peut être appelé directement où vous effectuez un IBOutlet de la barre de recherche ...

@IBOutlet weak var searchBar: UISearchBar! {
    didSet {
        searchBar.change(textFont: GlobalConstants.Font.avenirBook14)
    }
}
15
Mr. Bean

Définir la taille de la police du texte de l'espace réservé:

UILabel.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = UIFont.systemFont(ofSize: 12)

définir la taille de la police du texte de recherche:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = UIFont.systemFont(ofSize: 12)
12
ldehai

Dans iOS 8, essayez ceci

for subView in searchBar.subviews  {
  for subsubView in subView.subviews  {
      if let textField = subsubView as? UITextField {
        textField.attributedPlaceholder =  NSAttributedString(string:NSLocalizedString("Search", comment:""),
          attributes:[NSForegroundColorAttributeName: UIColor.orangeColor()])
      }
  }
}
8
Arshad

Version Swift 3 de la réponse de @ Alvin

let textFieldInsideUISearchBar = searchBar.value(forKey: "searchField") as? UITextField
    let placeholderLabel       = textFieldInsideUISearchBar?.value(forKey: "placeholderLabel") as? UILabel
    placeholderLabel?.font     = UIFont.systemFont(ofSize: 12.0)
6
Ajay Kumar

Cela fonctionne parfaitement pour ios7 -> ios9 en utilisant Swift 2:

if #available(iOS 9.0, *) {
    UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).font = UI.getInstance.tinyFont
} else {
    func checkSubview(view:UIView)
    for subView in view.subviews {
        if subView is UITextField {
            let textField = subView as! UITextField
            textField.font = UI.getInstance.tinyFont
        } else {
            checkSubview(subView)
        }

    }
    checkSubview(view)
}

Remplacez simplement UI.getInstance.tinyFont par la police de votre choix.

3
ThomasE