7

我正在尝试使用自定义图像自定义 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;

编辑:顺便说一句,我正在使用 iOS 5!也许外观代理是可用的,但到目前为止,当我尝试将它用于后退按钮的东西(在 appDelegate 中)时,应用程序简单崩溃。

4

4 回答 4

17

好的,我使用了一些粗略的技巧解决了这个问题,但至少它有效。如果有人确实提出了更标准的解决方案,请告诉我!

这是我的代码:

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 个小时!

于 2012-06-06T03:50:13.607 回答
0

" 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;
于 2012-06-06T01:32:40.670 回答
0

我今天尝试了很多并得到了这个解决方案。它将背景图像按钮图像分开,看起来更容易而且不那么棘手。

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;
于 2014-02-13T14:15:21.127 回答
0

在这种情况下,我发现替换 barButtonItem 更容易,只需使用自定义按钮即可。

不完全确定你是如何设计你的项目的,但它对我有用。

自定义按钮的设置

后退按钮,产生的外观

然后将此代码附加到它:

//go back to the previous screen

-(IBAction)back{

[self dismissModalViewControllerAnimated:YES];

}
于 2012-06-06T01:37:59.090 回答