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

时间:2012-05-28 10:06:57

标签: iphone ios xcode ios5

我正在尝试使用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 0x5e695 0x5dd78 0x217aa 0x789386 0x78a274 0x799183 0x799c38 0x78d634 0x203bef5 0x1e7c195 0x1de0ff2 0x1ddf8da 0x1dded84 0x1ddec9b 0x789c65 0x78b626 0x2164d 0x2895 0x1) 终止调用抛出异常“

上述方法与UITabBar和UINavigationBar完美配合。

任何见解?

非常感谢。

3 个答案:

答案 0 :(得分:3)

试试这个,它适用于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],
      }];
}

答案 1 :(得分:1)

查看uisearchbar的苹果参考指南,在自定义外观下,您可以看到uisearchbar可以使用哪些方法。 uisearchbar无法使用SetTitleAttributes,我看不到另一种通过外观更改uisearchbar字体的方法。

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

workaround

答案 2 :(得分:0)

尝试使用此代码

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

希望这对你有用。