Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>There are two kinds of button on the navigation bar in iOS 7: button with image and button with text. I wrote a class to do it. Here is how:</p> <p><strong>GlobalUICommon.h:</strong></p> <pre><code>@interface UIBarButtonItem(CustomUIOfONE) + (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage*)highlightedImage xOffset:(NSInteger)xOffset target:(id)target action:(SEL)action; + (UIBarButtonItem*)barItemWithTitle:(NSString*)title xOffset:(NSInteger)xOffset target:(id)target action:(SEL)action; @end </code></pre> <p><strong>GlobalUICommon.m:</strong></p> <pre><code>@implementation UIBarButtonItem(CustomUIOfONE) + (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage*)highlightedImage xOffset:(NSInteger)xOffset target:(id)target action:(SEL)action { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; [button setImage:image forState:UIControlStateNormal]; [button setImage:highlightedImage forState:UIControlStateHighlighted]; if ([[[UIDevice currentDevice] systemVersion] floatValue] &gt;= 7) { [button setImageEdgeInsets:UIEdgeInsetsMake(0, xOffset, 0, -xOffset)]; } UIBarButtonItem *customUIBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; return customUIBarButtonItem; } + (UIBarButtonItem*)barItemWithTitle:(NSString*)title xOffset:(NSInteger)xOffset target:(id)target action:(SEL)action { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setTitle:title forState:UIControlStateNormal]; [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; [button.titleLabel setFont:[UIFont systemFontOfSize:15]]; [button setFrame:CGRectMake(0, 0, [button.titleLabel.text sizeWithFont:button.titleLabel.font].width + 3, 24)]; [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; if ([[[UIDevice currentDevice] systemVersion] floatValue] &gt;= 7) { [button setContentEdgeInsets:UIEdgeInsetsMake(0, xOffset, 0, -xOffset)]; } UIBarButtonItem *customUIBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; return customUIBarButtonItem; } @end </code></pre> <p><strong>YourViewController.m:</strong></p> <p>Example for Button with Image:</p> <pre><code>UIBarButtonItem* leftButtomItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"yourImage"] highlightedImage:[UIImage imageNamed:@"yourImage"] xOffset:-11 target:self action:@selector(yourHandler)]; self.navigationItem.leftBarButtonItem = leftButtomItem; UIBarButtonItem* rightButtonItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"yourImage"] highlightedImage:[UIImage imageNamed:@"yourImage"] xOffset:11 target:self action:@selector(yourHandler)]; self.navigationItem.rightBarButtonItem = rightButtonItem; </code></pre> <p>Example for Button with Text:</p> <pre><code>self.navigationItem.leftBarButtonItem = [UIBarButtonItem barItemWithTitle:@"yourText" xOffset:-11 target:self action:@selector(yourHandler:)]; self.navigationItem.rightBarButtonItem = [UIBarButtonItem barItemWithTitle:@"yourText" xOffset:11 target:self action:@selector(yourHandler:)]; </code></pre> <p>That's it.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload