Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIBarButtonItem with custom image and no border

I want to create a UIBarButtonItem with a custom image, but I don't want the border that iPhone adds, as my Image has a special border.

It's the same as the back button but a forward button.

This App is for an inHouse project, so I don't care if Apple reject or approves it or likes it :-)

If I use the initWithCustomView:v property of the UIBarButtonItem, I can do it:

UIImage *image = [UIImage imageNamed:@"right.png"];  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal]; [button setBackgroundImage: [[UIImage imageNamed: @"right_clicked.png"] stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateHighlighted];   button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);  [button addTarget:self action:@selector(AcceptData)    forControlEvents:UIControlEventTouchUpInside];  UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, image.size.width, image.size.height) ];  [v addSubview:button];  UIBarButtonItem *forward = [[UIBarButtonItem alloc] initWithCustomView:v];  self.navigationItem.rightBarButtonItem= forward;  [v release]; [image release]; 

This works, but if I have to repeat this process in 10 views, this is not DRY.

I suppose I have to subclass, but what ?

  • NSView ?
  • UIBarButtonItem ?

thanks,

regards,

like image 337
mongeta Avatar asked Apr 21 '10 08:04

mongeta


1 Answers

Another simple solution is

  1. Drag a standard UIButton
  2. Set the button's style to custom and set your image for that button
  3. Drag it onto the UINavigationBar
  4. Set Selector
like image 120
san Avatar answered Oct 08 '22 13:10

san