如何在iOS5的UISearchBar中更改字体?

问题描述:

我试图使用新的“外观”代理对iOS5的改变我所有的UISearchBar对象的字体的东西,如:如何在iOS5的UISearchBar中更改字体?

[[UISearchBar appearance] setTitleTextAttributes: 
[NSDictionary dictionaryWithObjectsAndKeys: 
    [UIColor whiteColor], UITextAttributeTextColor, 
    [UIFont fontWithName:@"Trebuchet MS" size:0.0], UITextAttributeFont, 
    nil]]; 

我每次运行它,我得到这个错误:

“2012-05-28 03:01:52.264 DirectDx_ClientApp [30039:15503] *终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因是: ' - [_ UIAppearance setTitleTextAttributes:]:无法识别的选择发送到实例0x8460cf0' *第一次调用堆栈: (0x1ea8022 0x3a4fcd6 0x1ea9cbd 0x1e0eed0 0x1e0ecb2 0x5e6 95 0x5dd78 0x217aa 0x789386 0x78a274 0x799183 0x799c38 0x78d634 0x203bef5 0x1e7c195 0x1de0ff2 0x1ddf8da 0x1dded84 0x1ddec9b 0x789c65 0x78b626 0x2164d 0x2895为0x1) 终止称为抛出异常”

上述方法工作得很好与UITabBar和UINavigationBar的。

任何见解?

非常感谢。

+0

检查[this](http://*.com/a/4697842/845115) –

+0

@Mudit - 谢谢。 – luckman777

+0

'[UITextField appearanceWhenContainedIn:[NSArray arrayWithObject:[UISearchBar class]]'可能会工作。 –

签出uisearchbar的苹果参考指南,在自定义外观下,您可以看到哪些方法可以通过uisearchbar进行验证。 SetTitleAttributes对于uisearchbar是不可能的,我看不到另一种方法,通过外观来更改uisearchbar的字体。

试图调用一个对象不支持的方法,将总会给你一个错误。在你的情况下,setTitleArtributes由其他类支持,但遗憾的是不适用于uisearchbar。

有一个workaround

+0

非常感谢您的回答。有趣的是,我昨晚看了参考指南,但凌晨2点我非常ble and,我发誓我看到了“setTitleTextAttributes”!我担心解决方法是我现在唯一的选择。再次感谢。 – luckman777

试试这个,它的正常工作适用于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], 
     }]; 
} 
+0

这里的示例:https://github.com/quellish/UISearchBarSetFont – quellish

+0

这不适用于UiSearchDisplayController – Tander

尝试使用此代码

UITextField *textField = [self.searchBar valueForKey: @"_searchField"]; 
[textField setFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:17.0]]; 

希望这将为你工作。