web-dev-qa-db-ja.com

Swiftでの検索バーのプレースホルダーテキストフォントの変更

検索表示コントローラー内の検索バーのプレースホルダーテキストのフォントを変更しようとしています。私はいくつかの例を見て、それらを実装しようとしましたが、それらはObjective-Cにあるので、作業できるものを見つけることができませんでした。

たとえば、私はこれを試しました:

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

しかし、私は乗り越えられませんでしたvar textField: UITextField = UISearchBar

何か案は?

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

これは、searchBarのテキストフィールドでフォントまたはその他の同様の変更を変更する最も簡単な方法です。 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
        }
    }
} }

上記のコードは、searchBarのIBOutletを作成する場所で直接呼び出すことができます...

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

プレースホルダーテキストのフォントサイズを設定します。

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

検索テキストのフォントサイズを設定:

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

IOS 8では、これを試してください

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

@Alvinの回答のSwift 3バージョン

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

これはios7-> ios9で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)
}

UI.getInstance.tinyFontを任意のフォントに置き換えるだけです。

3
ThomasE