我尝试使用自定义图片自定义backBarButtonItem(文字' back'包含在该图片中),这是当前结果:
有谁知道为什么会这样?
这是我在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中)应用程序简单崩溃。
答案 0 :(得分:16)
好的,我解决了这个问题,使用了一些粗略的技巧,但至少它有效。如果有人想出一个更标准的解决方案,请告诉我!
这是我的代码:
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: How to implement a custom (image) back button
中的想法然后调整它而不是设置 -
self.title = @" ";
在每个视图加载时(也可能会混淆导航栏标题本身)
我只是将“后退”按钮文本的偏移设置为图像高度的两倍,因此您永远不会看到它。
为什么要解决所有这些问题,而不是使用左键按钮来使用它自己的方法来弹出视图控制器?
主要原因是您丢失了标准后退按钮滑动动画以更改视图。此外,这意味着我不需要使用自定义按钮或编写自定义方法返回。它只是起作用。
希望这也解决了别人的问题,我知道我已经坚持了3个小时了!
答案 1 :(得分: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;
答案 2 :(得分:0)
在这种情况下,我发现只需使用自定义按钮就可以更轻松地替换barButtonItem。
不完全确定你是如何设计项目的,但它对我有用。
然后将此代码附加到它:
//go back to the previous screen
-(IBAction)back{
[self dismissModalViewControllerAnimated:YES];
}
答案 3 :(得分: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;