I tried to use UIBarButtonItem to display an image and a button, but I'm sure it is locked to display one or the other. Using the basic idea from this thread , I came up with a solution using UIButton and a background image. The biggest drawback of what I did is that when the title text varies greatly in size, the background image is stretched, making the rounded corners look a bit.
CustomBarButtonItem.h
CustomBarButtonItem.m
#import "CustomBarButtonItem.h" @implementation CustomBarButtonItem - (id) initWithImage:(UIImage *)image title:(NSString *)title target:(id)target action:(SEL)action { UIButton *barButton = [UIButton buttonWithType:UIButtonTypeCustom]; UIFont *font = [UIFont boldSystemFontOfSize:13]; barButton.titleLabel.font = font; barButton.titleLabel.shadowOffset = CGSizeMake(0, -1); barButton.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 5); [barButton setImage:image forState:UIControlStateNormal]; [barButton setTitle:title forState:UIControlStateNormal]; [barButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [barButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted]; [barButton setTitleShadowColor:[[UIColor blackColor] colorWithAlphaComponent:0.5] forState:UIControlStateNormal]; [barButton setBackgroundImage:[UIImage imageNamed:@"bar-button-item-background.png"] forState:UIControlStateNormal]; barButton.frame = CGRectMake(0, 0, image.size.width + 15 + [title sizeWithFont:font].width, 30); if (self = [super initWithCustomView:barButton]) { self.target = target; self.action = action; } return self; } @end @implementation UIBarButtonItem (CustomBarButtonItem) + (UIBarButtonItem *) barButtonItemWithImage:(UIImage *)image title:(NSString *)title target:(id)target action:(SEL)action { return [[[CustomBarButtonItem alloc] initWithImage:image title:title target:target action:action] autorelease]; } @end
Sample Usage:
UIBarButtonItem *customButtonItem = [UIBarButtonItem barButtonItemWithImage:[UIImage imageNamed:@"calendar.png"] title:@"Add to calendar" target:self action:@selector(addToCalendar)];
My background image for the button:

source share