自定义导航按钮UIBarButtonItem

自定义导航按钮UIBarButtonItem

基本上每个iOS APP里面都有导航,比如微信、QQ、支付宝。导航可以很方便地帮助我们管理视图控制器(UIViewController)。导航的重要性不言而喻,基本上是每一位iOS初学者都要接触到的问题。

iOS系统导航栏中有 leftBarButtonItemrightBarButtonItem,我们可以根据自己的需求来自定义这两个UIBarButtonItem

四种创建方法

系统提供了四种创建的方法:

- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(id)target action:(SEL)action;


- (instancetype)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;


- (instancetype)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;

- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(id)target action:(SEL)action;

- (instancetype)initWithCustomView:(UIView *)customView;

通过系统UIBarButtonSystemItem创建

自定义 rightBarButtonItem,代码如下:

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(right:)];

UIBarButtonSystemItem有以下样式可以供选择:

typedef NS_ENUM(NSInteger, UIBarButtonSystemItem) {
	UIBarButtonSystemItemDone,
	UIBarButtonSystemItemCancel,
	UIBarButtonSystemItemEdit,  
	UIBarButtonSystemItemSave,  
	UIBarButtonSystemItemAdd,
	UIBarButtonSystemItemFlexibleSpace,
	UIBarButtonSystemItemFixedSpace,
	UIBarButtonSystemItemCompose,
	UIBarButtonSystemItemReply,
	UIBarButtonSystemItemAction,
	UIBarButtonSystemItemOrganize,
	UIBarButtonSystemItemBookmarks,
	UIBarButtonSystemItemSearch,
	UIBarButtonSystemItemRefresh,
	UIBarButtonSystemItemStop,
	UIBarButtonSystemItemCamera,
	UIBarButtonSystemItemTrash,
	UIBarButtonSystemItemPlay,
	UIBarButtonSystemItemPause,
	UIBarButtonSystemItemRewind,
	UIBarButtonSystemItemFastForward,
#if __IPHONE_3_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
	UIBarButtonSystemItemUndo,
	UIBarButtonSystemItemRedo,
#endif
#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
	UIBarButtonSystemItemPageCurl,
#endif
};

最后别忘了实现 right:方法:

- (void)right:(id)sender
{
    NSLog(@"rightBarButtonItem");
}

自定义文字的UIBarButtonItem

在文章 关于导航栏的六个小技巧的第五个技巧里面有自定义 rightBarButtonItem

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(back:)];

UIBarButtonItemStyle有以下三种选择:

typedef NS_ENUM(NSInteger, UIBarButtonItemStyle) {
    UIBarButtonItemStylePlain,
    UIBarButtonItemStyleBordered NS_ENUM_DEPRECATED_IOS(2_0, 8_0, "Use UIBarButtonItemStylePlain when minimum deployment target is iOS7 or later"),
    UIBarButtonItemStyleDone,
};

实现 back:方法:

- (void)back:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];
}

自定义照片的UIBarButtonItem

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"test"] style:UIBarButtonItemStylePlain target:self action:@selector(right:)];

自定义UIView的UIBarButtonItem

自定义 UIView,然后通过 initWithCustomView:方法来创建 UIBarButtonItem

UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 60)];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:testView];

看到有朋友在后台提问:

刚哥,我现在即需要改那个导航原生的返回图片,也要改返回文字,应该怎么改呢,求指教。

其实,这个就可以用 initWithCustomView:来解决,自定义 UIView你可以放 UIImageViewUILabel。可以自定义 UIView,那么想怎么定义都是可以的。



修改导航栏标题的字体

跟iOS 6一样,我们可以使用导航栏的titleTextAttributes属性来定制导航栏的文字风格。在text attributes字典中使用如下一些key,可以指定字体、文字颜色、文字阴影色以及文字阴影偏移量:

  • UITextAttributeFont – 字体key
  • UITextAttributeTextColor – 文字颜色key
  • UITextAttributeTextShadowColor – 文字阴影色key
  • UITextAttributeTextShadowOffset – 文字阴影偏移量key

如下代码所示,对导航栏的标题风格做了修改:

1
2
3
4
5
6
7
NSShadow *shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
    shadow.shadowOffset = CGSizeMake(0, 1);
    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,
                                                           shadow, NSShadowAttributeName,
                                                           [UIFont fontWithName:@"HelveticaNeue-CondensedBlack" size:21.0], NSFontAttributeName, nil]];

运行效果如下图所示:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值