Настройте UIBarbuttonitem с фоновыми изображениями - PullRequest
3 голосов
/ 22 июня 2010

Я добавил экземпляр UIToolbar и кнопки поверх него. Каждая кнопка относится к классу UIBarButtonItem.

Мое требование - чтобы каждая кнопка имела индивидуальный макет, я не хочу использовать собственные стили кнопок, предоставляемые Apple. Таким образом, у меня было 3 варианта в Интерфейсном Разработчике (Простой, Граничный, Готово). Я выбрал стиль Plain и выбрал изображение, которое хочу добавить в качестве фона под Бар -> Изображение.

Но у меня это не сработало, использование простого параметра делает меня немного ближе, так как границы и готово нигде не ближе, но все равно отображает изображения в белом контуре. Есть ли в любом случае, что изображения на кнопках добавляются и они выглядят именно так, как они есть. Это довольно простая задача при использовании UIButton. Я просто использовал опцию «Изображение» в инспекторе атрибутов для UIButton и выбрал нужное изображение. Но здесь при использовании UIBarButtonitem он вообще не работает. Вот как он отображает

image

Спасибо Теймур

Ответы [ 4 ]

24 голосов
/ 22 июня 2010

Теймур,

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

+ (UIBarButtonItem *)createSquareBarButtonItemWithTitle:(NSString *)t target:(id)tgt action:(SEL)a
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    // Since the buttons can be any width we use a thin image with a stretchable center point
    UIImage *buttonImage = [[UIImage imageNamed:@"SquareButton.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0];
    UIImage *buttonPressedImage = [[UIImage imageNamed:@"SquareButton_pressed.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0];

    [[button titleLabel] setFont:[UIFont boldSystemFontOfSize:12.0]];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
    [button setTitleShadowColor:[UIColor colorWithWhite:1.0 alpha:0.7] forState:UIControlStateNormal];
    [button setTitleShadowColor:[UIColor clearColor] forState:UIControlStateHighlighted];
    [[button titleLabel] setShadowOffset:CGSizeMake(0.0, 1.0)];

    CGRect buttonFrame = [button frame];
    buttonFrame.size.width = [t sizeWithFont:[UIFont boldSystemFontOfSize:12.0]].width + 24.0;
    buttonFrame.size.height = buttonImage.size.height;
    [button setFrame:buttonFrame];

    [button setBackgroundImage:buttonImage forState:UIControlStateNormal];
    [button setBackgroundImage:buttonPressedImage forState:UIControlStateHighlighted];

    [button setTitle:t forState:UIControlStateNormal];

    [button addTarget:tgt action:a forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    return [buttonItem autorelease];
}
3 голосов
/ 22 июня 2010

Проблема в том, что UIBarButtonItem не является подклассом UIView.У меня была такая же проблема, и решение довольно тривиально:

Создайте объект UIButton с вашим пользовательским фоновым изображением, затем создайте экземпляр UIBarButtonItem, используя его метод initWithCustomView:, и передайте ваш объект UIButton в качестве параметра.

Надеюсь, я смогу вам помочь.

2 голосов
/ 23 июля 2012

Перетащите UIButton вне UIToolBar в IB, затем отформатируйте его, назначьте селекторы и перетащите его в UIToolBar.,., Это сработало для меня !!

0 голосов
/ 08 января 2015

У меня была такая же проблема с UIBarButton в панели навигации.Я использовал решение, предлагаемое kaar3k.Спасибо kaar3k.Перетащите UIB-кнопку вне NavBar в Storybaord, затем отформатируйте ее, назначьте селекторы и перетащите на NavBar !!

...