UIAppearance - Срив на лентата с инструменти и лентата за търсене

Получавам грешка на неразпознатия селектор, изпратен до инстанция, докато персонализирам UIToolbar и аспекта UISearchBar чрез UIAppearance.

Странното е, че се срива само на 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"]];

Но сега, когато докосна лентата за търсене, тя ми дава аспекта по подразбиране.


person Phillip    schedule 31.08.2013    source източник


Отговори (2)


Странното е, че се срива само на 6.1 или по-ниска, на iOS7 е добре и не се срива.

setBackgroundImage:forBarPosition:barMetrics: на UISearchBar е наличен само в iOS 7.0 и по-нови версии съгласно документацията.

Ето защо получавате изключение за неразпознат селектор на iOS 6.1.

person albertamg    schedule 31.08.2013

Успях да го накарам да работи по следния начин:

#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];

В класа, където беше необходимо персонализирането.

person Phillip    schedule 31.08.2013