2010-02-24 149 views

回答

17

我在这一个方面与几种方法摔跤,并最终使用来自多个来源的所有答案找出它。有几个技巧;这个片段将显示所有(我创建一个自定义rightNavButton,但你可以为任何UIBarButtonItem容易适应这一点):

// Produces a nice "right arrow" style button that mirrors the back arrow 
// automatically added by the navController 
// 
UIImage *buttonImage = [UIImage imageNamed:@"forwardButton.png"]; 
UIButton *forwardButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[forwardButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
[forwardButton setTitle:@"Meter" forState:UIControlStateNormal]; 
forwardButton.font = [UIFont boldSystemFontOfSize:12]; 
forwardButton.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); 
[forwardButton addTarget:self action:@selector(showMeter) 
      forControlEvents:UIControlEventTouchUpInside]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
      initWithCustomView:forwardButton]; 

注:事实证明,如果你想直接设定目标和行动上按钮项目后,使用UIButton分配自定义视图,它不会采取 - 你必须设置按钮本身的目标和行动 - 显然navBar使用逐字提供的按钮。

这是我使用的不透明的黑色 navBar(你可以使用任何东西,很明显)图像: http://raretiger.com/images/forwardbutton.png

+3

您可以在这里下载与Retina兼容的透明图像:[link] http://handleopenurl.com/assets/docs/arrow-buttons.zip [/ link] 后退箭头左侧有15键,5 (正常大小的按钮) – 2011-09-30 12:41:31

+2

你有一个内存泄漏,你分配'UIBarButtonItem''保留+1',然后将它分配给属性'rightBarButtonItem''保留+1'。这意味着UIBarButtonItem现在的保留计数为2,并且永远不会被释放。你需要自动释放UIBarButtonItem: 'self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:forwardButton] autorelease];' – Camsoft 2012-01-16 10:29:41

+1

图片链接消失了 – Esqarrouth 2014-03-03 11:23:44

4

您可以创建一个UIImageView的或用的UIButton所需要的图像,然后使用:

[[UIBarButtonItem alloc] initWithCustomView: arrowButton]; 

希望这有助于。

7

制作自定义背景。有关如何参见Creating a left-arrow button (like UINavigationBar's "back" style) on a UIToolbar


您可能-pushNavigationItem:animated:使内置的后退按钮出现,但你不能指定自定义操作它。


对于无证的方法,你可以使用

UIButton* backButton = [UIButton buttonWithType:101]; 

创建后退 “按钮”。

+0

什么是指向按钮正向数字代码? – ma11hew28 2010-09-04 06:56:27

+0

@Matt:这不是一个内置的按钮类型。 – kennytm 2010-09-04 07:12:59

+5

快速入侵,有点太迟了:前进按钮是一个带有transform = scale(-1,1)并且其textLabel具有transform = scale(-1,1)的后退按钮。 – Cyrille 2011-07-27 09:45:19

0

在继续@Plamen Dragozov的想法:我注意到,如果你离开的UIButton的是,它触摸时会触发图片调整,这与正常的导航后退按钮完全相反。所以我所做的就是取消选中“突出显示调整图像”,它就像一个魅力。

希望这能帮助像我这样的新手。

0

更优雅的解决方案:

UIBarButtonItem * backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 
[backButtonItem setBackgroundImage:[UIImage imageNamed:@"back.png"]  forState:UIControlStateNormal  barMetrics:UIBarMetricsDefault]; 
self.navigationItem.leftBarButtonItem = backButtonItem; 
0

我的问题是重命名该推视图控制器上出现后退按钮。我发现一个肮脏的解决方法,如果你忽略了非理想的动画问题,你会得到一个带你想要的标题的后退按钮。在viewWillAppear

(不用说,在默认情况下,如果没有leftBarButtonItem集,UINavigationController将呈现回

关键是要改变第一个VC称号viewWillDisappear并重新设置课程与推动当前VC)

在你把你的当前VC对VC的VC的标题按钮,做

-(void) viewWillDisappear:(BOOL) animated { 
    [super viewWillDisappear:animated]; 
    self.title = @"Back"; 
} 

-(void) viewWillAppear:(BOOL) animated { 
    [super viewWillAppear:animated]; 
    self.title = @"Original Title"; 
}