iphone - пользовательский UIBarButtonItem для кнопки назад - PullRequest
8 голосов
/ 30 января 2011

Я пытаюсь использовать пользовательский элемент для кнопки «Назад» на панели навигации.

UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationItem setBackBarButtonItem: customItem];
[customItem release];

В результате я получаю изображение с рамкой вокруг него.Это выглядит так (мое изображение - кнопка «Назад»):

Back Button

Как мне избавиться от границы?Что я делаю не так?

Ответы [ 4 ]

10 голосов
/ 30 мая 2013

Основываясь на коде Хорхе, это мое решение.

Я создаю простую категорию на UIViewController:

UIViewController + ImageBackButton.h

#import <UIKit/UIKit.h>

@interface UIViewController (ImageBackButton)

- (void)setUpImageBackButton;

@end

UIViewController + ImageBackButton.m

#import "UIViewController+ImageBackButton.h"

@implementation UIViewController (ImageBackButton)

- (void)setUpImageBackButton
{
    UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 34, 26)];
    [backButton setBackgroundImage:[UIImage imageNamed:@"back_arrow.png"] forState:UIControlStateNormal];
    UIBarButtonItem *barBackButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    [backButton addTarget:self action:@selector(popCurrentViewController) forControlEvents:UIControlEventTouchUpInside];
    self.navigationItem.leftBarButtonItem = barBackButtonItem;
    self.navigationItem.hidesBackButton = YES;
}

- (void)popCurrentViewController
{
    [self.navigationController popViewControllerAnimated:YES];
}

@end

Теперь все, что вам нужно сделать, это #import UIViewController+ImageBackButton.h либо во всех ваших контроллерах представления, либо в пользовательском базовом классе контроллера представления, от которого наследуются ваши другие контроллеры представления, и реализовать метод viewWillAppear::

- (void)viewWillAppear:(BOOL)animated
{
    [self setUpImageBackButton];
}

Вот и все. Теперь у вас есть кнопка возврата изображения везде. Без границы. Наслаждайтесь!

10 голосов
/ 30 января 2011

Ваше изображение появляется внутри кнопки "Назад", и оно (по вашему скриншоту) не соответствует размеру кнопки "Назад".

Возможно, вы захотите скрыть кнопку «Назад», а затем заменить ее «левой кнопкой».

Код:

UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:self.navigationController action:@selector(popViewControllerAnimated:)];
[self.navigationController setHidesBackButton:YES];
[self.navigationItem setLeftBarButtonItem: customItem];
[customItem release];
6 голосов
/ 20 апреля 2012

Вот обновленная версия.Это включает в себя настройку цели, размера шрифта и т. Д.

Кроме того, это означает, что setHidesBackButton недоступно как свойство navigationController.

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *backButtonBackgroundImg = [UIImage imageNamed:@"BackButton.png"];
backButton.frame = CGRectMake(0.0f, 0.0f, backButtonBackgroundImg.size.width, backButtonBackgroundImg.size.height);
[backButton setBackgroundImage:backButtonBackgroundImg forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(didTouchUpInsideBackButton:) forControlEvents:UIControlEventTouchUpInside];
backButton.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont smallSystemFontSize]];
[backButton setTitle:@"MyTitle" forState:UIControlStateNormal];

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

Обратите внимание, что этоиз проекта ARC, поэтому нет объектов и т. д. на объектах.

1 голос
/ 03 декабря 2012

Я создал категорию UINavigationBar, которую я вызываю в viewWillAppear в каждом из моих viewControllers. Код, который я использую для изменения внешнего вида кнопки «Назад», следующий:

UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake( your button frame)];
[backButton setBackgroundImage:[UIImage imageNamed:@"your image name"] forState:UIControlStateNormal];
UIBarButtonItem *barBackButtonItem = [[UIBarButtonItem alloc] initWithCustomView: backButton];
[backButton addTarget:delegate action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside];
self.topItem.leftBarButtonItem = barBackButtonItem;
self.topItem.hidesBackButton = YES;

Отлично работает под iOS 6.

...