2014-10-18 6 views
12

Ich versuche, die Schriftart des Platzhaltertexts in der Suchleiste innerhalb meines Suchanzeige-Controllers zu ändern. Ich habe mir einige Beispiele angeschaut und versucht, sie zu implementieren, aber wie in Objective-C, konnte ich keine finden, mit denen ich arbeiten könnte.Ändern der Suchleiste Platzhaltertextschrift in Swift

Zum Beispiel habe ich versucht, dieses:

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

Aber ich war nicht in der Lage Vergangenheit Irgendwelche Ideen var textField: UITextField = UISearchBar

zu bekommen?

Antwort

5

In iOS 8, versuchen Sie dies

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()]) 
     } 
    } 
} 
3

Das funktioniert perfekt für ios7 -> ios9 mit schnellen 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) 
} 

Ersetzen Sie einfach UI.getInstance.tinyFont durch Unabhängig davon, welche Schriftart, die Sie wollen.

24
//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() 
+0

"placeholderLabel" scheint nicht mehr zu funktionieren (iOS10), aber das Ändern der Schriftart von "searchField" ändert sowohl die Platzhalter - als auch die Textschrift sowie – Daniel

7

Dies ist die einfachste Übung zum Ändern der Schriftart oder anderer ähnlicher Änderungen im Textfeld von searchBar. Ich habe XCode 8.4, Swift 3.x, iOS 10.x verwendet.

extension UISearchBar { 

func change(textFont : UIFont?) { 

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

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

Der obige Code kann direkt aufgerufen werden, in dem Sie eine IBOutlet der SearchBar machen ...

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

Swift 3-Version von @ Alvin Antwort

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

Just in Wenn jemand anderes Schwierigkeiten hat, dies zu erreichen, müssen Sie bei Verwendung von Storyboards einen Platzhalterwert in der Suchleiste des Storyboards festlegen, bevor Sie diesen Code verwenden – Leonardo