web-dev-qa-db-ja.com

UISearchBar iOS 7のフォントサイズとフォントスタイルを変更する

IOS 7でUISearchBarのフォントサイズとフォントスタイルを変更するにはどうすればよいですか?

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

IOS 6で動作していますが、iOS 7でクラッシュします

25
SWT

これを試してください、それはiOS 5.0以降でうまく機能しています:(iOS 7も)

- (void)viewDidLoad
{

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setFont:[UIFont fontWithName:@"Helvetica" size:20]];

}

IOS 8の場合

- (void)viewDidLoad
    {

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
            NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:20],
      }];

    }
67
Siva

受け入れられた回答は、iOS 7.1では機能しませんでした。これを次のように変更する必要がありました。

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
            NSFontAttributeName: [UIFont fontWithName:@"Avenir-Heavy" size:20.],
}];
34
joel.d

iOS 10 Swift 3:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSFontAttributeName:UIFont(name: "Avenir-Heavy", size: 22)!]
6
Piotr Tomasik

appearanceWhenContainedIn:はiOS9では非推奨です。次を使用してください:

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setDefaultTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"FontName" size:14]}];
2
Filip

Swift 4の場合、NSAttributedStringKey enumを参照する必要があります。

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self])
        .defaultTextAttributes = [NSAttributedStringKey.font.rawValue: UIFont(...)]
1
Andrew

rmaddyが言ったように、標準のUIコンポーネントのプライベートサブビュー構造に依存するべきではありません。これは変更され、コードが壊れます。これを行うには、提供されているAPIを使用する必要があります。

私は多くの安全なアプローチは次のとおりだと思います:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setFont:[UIFont systemFontOfSize:14]];

または、次のサンプルコードを使用することもできます。

for(UIView *subView in searchBar.subviews) {
    if ([subView isKindOfClass:[UITextField class]]) {
        UITextField *searchField = (UITextField *)subView;
        searchField.font = [UIFont systemFontOfSize:14];
    }
}

上記のコードは、subviewsindexを使用していないため、安全です(少なくとも質問で述べたコードと比較して)。

1
Bhavin

Swift 5

@Piotr Tomasikのコードは、Swift 5でまだ機能しています)ビット変更後

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.font:UIFont(name: "poppins", size: 13)!]
1
Sanjay Mishra

動作しているSwiftバージョンを探している人のために、 この回答を採用しました 。Swiftは現在Objc varargsメソッドをサポートしていません、上記のメソッドでは直接機能しません。varargsを使用せず、必要なものを呼び出すObjective-Cカテゴリを作成することで、これを回避できます。

// UIAppearance+Swift.h
@interface UIView (UIViewAppearance_Swift)
// appearanceWhenContainedIn: is not available in Swift. This fixes that.
+ (instancetype)my_appearanceWhenContainedIn:(Class<UIAppearanceContainer>)containerClass;
@end

// UIAppearance+Swift.m
@implementation UIView (UIViewAppearance_Swift)
+ (instancetype)my_appearanceWhenContainedIn:(Class<UIAppearanceContainer>)containerClass {
    return [self appearanceWhenContainedIn:containerClass, nil];
}
@end

ただ#import "UIAppearance+Swift.h"ブリッジヘッダー内。

次に呼び出すだけです:

UITextField.my_appearanceWhenContainedIn(UISearchBar.self).font = UIFont.systemFontOfSize(14.0)
1
Mike Sprague
  • Swift
  • IOS 8

私にとって、これは再帰関数を使用して実際のテキストフィールドを見つけるために機能しました。

extension UIView {

func recursive_applyTheme_Search(
    #dynamicTextStyle: NSString,
    bgColor: UIColor,
    cursorColor: UIColor,
    textColor: UIColor,
    placeholderTextColor: UIColor,
    borderColor: UIColor,
    borderWidth: CGFloat,
    cornerRadius: CGFloat) {

    for subview in self.subviews
    {
        if subview is UITextField {

            (subview as! UITextField).applyThemeForSearchBar(
                dynamicTextStyle: dynamicTextStyle,
                bgColor: bgColor,
                cursorColor: cursorColor,
                textColor: textColor,
                placeholderTextColor: placeholderTextColor,
                borderColor: borderColor,
                borderWidth: borderWidth,
                cornerRadius: cornerRadius)
        }
        else { subview.recursive_applyTheme_Search(
                dynamicTextStyle: dynamicTextStyle,
                bgColor: bgColor,
                cursorColor: cursorColor,
                textColor: textColor,
                placeholderTextColor: placeholderTextColor,
                borderColor: borderColor,
                borderWidth: borderWidth,
                cornerRadius: cornerRadius) }
    }

}
}
0
Andrei Popa