在通过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模拟器上启动应用程序我都会
-[_UIAppearance setBackgroundImage:forBarPosition:barMetrics:]: unrecognized selector sent to instance 0xaba4550
用于UIToolbar和UISearchBar。我确定它们会导致崩溃,因为如果我对这些行进行评论,则应用程序会正常启动。
这段代码有什么问题?我真的被这个困住了。
修改 我设法通过在需要自定义的类中设置方面来实现它,例如:
[[UISearchBar appearance]setBackgroundImage:[UIImage imageNamed:@"searchBarBackground"]];
但现在,当我点击SearchBar时,它会给我默认方面。
答案 0 :(得分:1)
奇怪的是,仅在6.1或更低版本上崩溃,在iOS7上运行正常并且不会崩溃。
setBackgroundImage:forBarPosition:barMetrics:
上的 UISearchBar
仅适用于iOS {7.0}及更高版本的the documentation。
这就是iOS 6.1上无法识别的选择器异常的原因。
答案 1 :(得分: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];
在需要定制的类中。