iPhone:制作箭头形状的UIBarButtonItem

时间:2010-02-24 22:33:32

标签: iphone xcode uinavigationcontroller uibarbuttonitem

我在导航栏上有一个UIBarButtonItem。我想把它做成箭头形状。我的意思是我希望它是正方形,除了尖尖的一面。有谁知道怎么做?

谢谢!

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:7)

制作自定义背景。有关具体方法,请参阅Creating a left-arrow button (like UINavigationBar's "back" style) on a UIToolbar


您可以-pushNavigationItem:animated:显示内置后退按钮,但您无法为其指定自定义操作。


对于未记录的方法,您可以使用

UIButton* backButton = [UIButton buttonWithType:101];

创建一个后退“按钮”。

答案 2 :(得分:4)

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

[[UIBarButtonItem alloc] initWithCustomView: arrowButton];

希望这有帮助。

答案 3 :(得分:0)

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

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

答案 4 :(得分: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;

答案 5 :(得分:0)

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

诀窍是更改viewWillDisappear中第一个VC的标题,并在viewWillAppear

中重新设置它

(不用说,默认情况下,如果没有leftBarButtonItem设置,UINavigationController将显示一个后退按钮,其中包含推送当前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";
}