首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义BackBarButtonItem

自定义BackBarButtonItem
EN

Stack Overflow用户
提问于 2012-06-06 08:57:59
回答 4查看 19.5K关注 0票数 7

我正在尝试使用自定义图像自定义backBarButtonItem (文本'back‘包含在该图像中),以下是当前结果:

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

有人知道为什么会发生这种情况吗?

下面是我在viewDidLoad上的代码(实际上在父控制器上运行,然后在具有back按钮的新控制器上再次运行)

代码语言:javascript
复制
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中),应用程序简单地崩溃了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-06 11:50:14

好吧,我解决了这个问题,使用了一点粗略的技巧,但至少它是有效的。如果有人想出一个更标准的解决方案,请让我知道!

下面是我的代码:

代码语言:javascript
复制
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的方法中:

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

在使用它作为背景时,为了防止它拉伸,我使用了iOS 5: How to implement a custom (image) back button中的想法

但后来又调整了一下,而不是设置-

代码语言:javascript
复制
self.title = @" ";

在每次视图加载时(这也可能会扰乱导航栏标题本身)

我只是将“后退”按钮文本的偏移量设置为图像高度的两倍,所以你永远看不到它。

为什么要这么麻烦,而不是使用左键项目和它自己的方法来弹出视图控制器呢?

主要原因是您失去了用于更改视图的标准后退按钮滑动动画。此外,这意味着我不需要使用自定义按钮或编写自定义方法来返回。它只是简单地工作。

希望这也能解决别人的问题,我知道我被困了整整3个小时!

票数 17
EN

Stack Overflow用户

发布于 2012-06-06 09:32:41

"UIBarButtonItemStylePlain“指定按钮样式。

试着用这种方式来创建你的后退按钮:

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2012-06-06 09:37:59

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

不太确定你是如何设计你的项目的,但它对我来说是有效的。

然后将此代码附加到它:

代码语言:javascript
复制
//go back to the previous screen

-(IBAction)back{

[self dismissModalViewControllerAnimated:YES];

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10906980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档