настроить UIBarButtonItem initWithBarButtonSystemItem, чтобы он отображался серым, а не белым в iOS 5

Я использую белый фон на своем UINavigationBar с текстом darkGrayColor.

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"uinavigationcontrollerbackground"] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:font,UITextAttributeFont ,[UIColor darkGrayColor], UITextAttributeTextColor,  [UIColor whiteColor], UITextAttributeTextShadowColor, nil]];

Это выглядит красиво, но в моем приложении есть такие кнопки:

self.searchButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(searchProducts)];

Я убил фоновый вид blakc по умолчанию, который у меня был следующим образом:

[[UIBarButtonItem appearance] setBackgroundImage:[UIImage imageNamed:@"uibarbuttonbackground"]  forState:UIControlStateNormal
                                          barMetrics:UIBarMetricsDefault];

Это просто белый квадрат.

Теперь мои значки по-прежнему белые со светло-серой тенью, в любом случае изменить эти значки по умолчанию?


person Slee    schedule 12.11.2013    source источник


Ответы (2)


Однажды я попытался изменить фон UIBarButtonSystemItemCamera, но ничего не вышло. Я предполагаю, что эти типы системных кнопок по умолчанию (UIBarButtonSystemItem) уже поставляются с фоновым изображением, поэтому его изменение не поможет.

Я рекомендую вам создать собственное представление и с его помощью инициализировать кнопку панели. Не идеальный код, но я надеюсь, что это поможет.

 UIImage *image = [UIImage imageNamed:@"icon.png"];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
    button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    [button addTarget:self action:@selector(takePicture:)    forControlEvents:UIControlEventTouchUpInside];

    UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, image.size.width, image.size.height) ];
    [v addSubview:button];


    UIBarButtonItem *barItem = [[[UIBarButtonItem alloc] initWithCustomView:v] autorelease];
person letitthebee    schedule 12.11.2013
comment
кто еще выпускает материал? Мы на iOS8, проснетесь? - person emotality; 27.07.2014
comment
@emotality Да, но это декабрь, и я использовал этот код в проекте «еще не ARC». Я уже почти проснулся :) - person letitthebee; 01.08.2014

Я использовал решение категории, найденное здесь, оно отлично работает:

UIBarButtonItem с пользовательским изображением и без рамки

Я немного больше работаю, чем я надеялся, но это хорошее чистое решение.

person Slee    schedule 13.11.2013