1

我在通过 UIAppearance 自定义 UIToolbar 和 UISearchBar 方面时收到无法识别的选择器发送到实例错误。

奇怪的是,仅在 6.1 或更低版本上崩溃,在 iOS7 上很好,并且不会崩溃。

这是我正在使用的代码:

[[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"toolbarBackground"] forToolbarPosition:UIBarPositionBottom barMetrics:UIBarMetricsDefaultPrompt];
[[UIToolbar appearance] setTintColor:[UIColor whiteColor]];
[[UISearchBar appearance]setBackgroundImage:[UIImage imageNamed:@"searchBarBackground"]  forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
[[UISearchBar appearance] setTintColor:[UIColor whiteColor]];

应该没问题。但是每次我在 iOS 6.1 Simulator 上启动应用程序时,我都会得到

-[_UIAppearance setBackgroundImage:forBarPosition:barMetrics:]: unrecognized selector sent to instance 0xaba4550

对于 UIToolbar 和 UISearchBar。我确定它们会导致崩溃,因为如果我评论这些行,应用程序会正常启动。

这段代码有什么问题?我真的被这个困住了。

编辑 我设法通过在需要自定义的类中设置方面来使其工作,例如:

[[UISearchBar appearance]setBackgroundImage:[UIImage imageNamed:@"searchBarBackground"]];

但是现在,当我点击 SearchBar 时,它给了我默认的外观。

4

2 回答 2

1

奇怪的是,仅在 6.1 或更低版本上崩溃,在 iOS7 上很好,并且不会崩溃。

setBackgroundImage:forBarPosition:barMetrics:根据文档, onUISearchBar仅在 iOS 7.0 及更高版本中可用。

这就是为什么在 iOS 6.1 上会出现无法识别的选择器异常。

于 2013-08-31T11:29:53.777 回答
1

我设法使它以这种方式工作:

#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)


UIImage *toolbarImage = [UIImage imageNamed:@"toolbarBackground"];
[self.navigationController.toolbar setBackgroundImage:toolbarImage forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

UIImage *searchBarImage = [UIImage imageNamed:@"searchBarBackground"];
if (SYSTEM_VERSION_LESS_THAN(@"7.0"))
     [self.searchDisplayController.searchBar setBackgroundImage:searchBarImage];
 else
     [self.searchDisplayController.searchBar setBackgroundImage:searchBarImage forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

在需要自定义的类中。

于 2013-08-31T11:37:59.063 回答