Настройка BackBarButtonItem

Я пытаюсь настроить backBarButtonItem с пользовательским изображением (текст "назад" включен в это изображение), вот текущий результат:

http://i.imgur.com/rFxFt.png

кто-нибудь знает почему это может происходить?

вот мой код на viewDidLoad (фактически работает как на родительском контроллере, так и на новом контроллере с кнопкой "Назад")

UIImage *backButtonImage = [UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"];


UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
                               initWithImage:backButtonImage
                               style:UIBarButtonItemStylePlain 
                               target:nil 
                               action:nil];


self.navigationItem.backBarButtonItem = backButton;

Edit: кстати, я использую iOS 5! Возможно внешний вид прокси можно использовать, но до сих пор, когда я пытался использовать его для кнопки "Назад" (в appDelegate), приложение просто падает.

4 ответов


ладно я решил проблему, используя немного грубый трюк, но по крайней мере это работает. Если кто-то придумает более стандартное решение, Пожалуйста, дайте мне знать!

вот мой код:

UIImage *backButtonImage = [[UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault];

Это в методе моего appdelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

чтобы остановить его растяжения при использовании его в качестве фона, я использовал идею из iOS 5: Как реализовать пользовательскую кнопку (изображение) назад

но затем настроил его так, а не нужно сет -

self.title = @" ";

при каждой загрузке вида (и это также может испортить сам заголовок панели навигации)

Я просто установил смещение для текста кнопки "Назад" в два раза выше высоты изображения, поэтому вы никогда его не увидите.

Зачем идти на все эти проблемы, а не использовать элемент левой кнопки с его собственным методом, чтобы вытащить контроллер вида?

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

надеюсь, что это решает чью-то проблему тоже, я знаю, что застрял на нем в течение хороших 3 часов!


в "UIBarButtonItemStylePlain " обозначение указывает стиль кнопки.

попробуйте создать кнопку "назад" таким образом:

UIImage *backButtonImage = [UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"];
CGRect frameimg = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg];
[someButton setBackgroundImage:backButtonImage forState:UIControlStateNormal];
// you have to do your own backButtonAction to pop the view controller, b.t.w.
[someButton addTarget:self action:@selector(backButtonAction:)
     forControlEvents:UIControlEventTouchUpInside];
[someButton setShowsTouchWhenHighlighted:YES];

UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:someButton];
[someButton release];

self.navigationItem.backBarButtonItem = backButton;

в этом случае мне было проще заменить barButtonItem, просто с помощью пользовательской кнопки.

не совсем уверен, как вы разработали свой проект, но это сработало для меня.

The setting for the custom button

The back button, resulting look

затем прикрепите к нему этот код:

//go back to the previous screen

-(IBAction)back{

[self dismissModalViewControllerAnimated:YES];

}

Я много пробовал сегодня и получил это решение. Он отделился фоновое изображение и изображения, кажется, легче и не так сложно.

UIImage *bgImage = [UIImage imageNamed:@"the-same-image-as-your-navbar-background-image"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:bgImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:bgImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

UIImage *buttonImage = [UIImage imageNamed:@"your-back-button-image"];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:buttonImage style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;