详解iOS应用中自定义UIBarButtonItem导航按钮的创建方法

 更新时间:2016年04月26日 09:22:57   作者:李刚  
这篇文章主要介绍了iOS应用中自定义UIBarButtonItem导航按钮的创建方法,文中举了一个自定义图片的UIBarButtonItem实例,比较具有代表性,需要的朋友可以参考下

iOS系统导航栏中有leftBarButtonItem和rightBarButtonItem,我们可以根据自己的需求来自定义这两个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

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你可以放UIImageView和UILabel。可以自定义UIView,那么想怎么定义都是可以的。

下面来看一个有趣的例子:
先说一下需求:
1.做一个RightBarButtonItem不断旋转的Demo;
2.点击RightBarButtonItem 按钮旋转或暂停;
最终效果展示:

201642692022584.jpg (407×252)

201642692104322.jpg (408×222)

就是那个音符图形的旋转。
关键代码展示(已加注释):

复制代码 代码如下:

//
// ViewController.m
// NavigationBtn
//

#import "ViewController.h"
#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)

///ImageView旋转状态枚举
typedef enum {
RotateStateStop,
RotateStateRunning,
}RotateState;

@interface ViewController ()
{
///旋转角度
CGFloat imageviewAngle;
///旋转ImageView
UIImageView *imageView;
///旋转状态
RotateState rotateState;
}

@end


复制代码 代码如下:

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
self.title=@"微信公众账号:乐Coding";
[self buildBarButtonItem];
}
#pragma mark 添加 RightBarButtonItem
-(void)buildBarButtonItem{

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
imageView.autoresizingMask = UIViewAutoresizingNone;
imageView.contentMode = UIViewContentModeScaleToFill;
imageView.bounds=CGRectMake(0, 0, 40, 40);
//设置视图为圆形
imageView.layer.masksToBounds=YES;
imageView.layer.cornerRadius=20.f;
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 40, 40);
[button addSubview:imageView];
[button addTarget:self action:@selector(animate) forControlEvents:UIControlEventTouchUpInside];
imageView.center = button.center;
//设置RightBarButtonItem
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.rightBarButtonItem = barItem;
}
#pragma mark 点击 RightBarButtonItem
- (void)animate {
//改变ImageView旋转状态
if (rotateState==RotateStateStop) {
rotateState=RotateStateRunning;
[self rotateAnimate];
}else{
rotateState=RotateStateStop;
}
}
#pragma mark 旋转动画
-(void)rotateAnimate{
imageviewAngle+=50;
//0.5秒旋转50度
[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
imageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(imageviewAngle));
} completion:^(BOOL finished) {
if (rotateState==RotateStateRunning) {
[self rotateAnimate];
}
}];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end


相关文章

  • 详解ios中scrollView上使用masonry

    详解ios中scrollView上使用masonry

    本篇文章主要给大家详细分析了ios开发中scrollView上使用masonry的详细知识内容,需要的朋友参考下吧。
    2018-02-02
  • iOS开发之UIScrollView详解

    iOS开发之UIScrollView详解

    UIScrollView使用非常广,本文研究UIScrollView各属性和方法,明白它们的意义、作用。这里我们整理UIScrollView一些常见用法以及一些效果的实现思路。
    2016-04-04
  • iOS集成微信支付开发

    iOS集成微信支付开发

    这篇文章主要为大家详细介绍了iOS集成微信支付开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 浅析iOS的Xcconfig

    浅析iOS的Xcconfig

    本篇文章介绍IOS中Xcconfig的相关知识内容,有兴趣的朋友学习下吧。
    2018-01-01
  • WKWebView、WebView和JS的交互方式详解

    WKWebView、WebView和JS的交互方式详解

    这篇文章主要给大家介绍了关于WKWebView、WebView和JS的交互方式,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • Objective-C中的重载和重写详解

    Objective-C中的重载和重写详解

    这篇文章主要介绍了Objective-C中的重载和重写详解的相关资料,开发IOS APP的好多朋友很容易搞错重载和重写,这里就详细介绍下,需要的朋友可以参考下
    2016-11-11
  • iOS自定义UIScrollView的滚动条实例代码

    iOS自定义UIScrollView的滚动条实例代码

    本篇文章主要介绍了iOS自定义UIScrollView的滚动条实例代码,详细的介绍了自定义滚动条的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • IOS URL中文乱码问题解决方案

    IOS URL中文乱码问题解决方案

    这篇文章主要介绍了IOS 解决URL中文乱码问题解决方案的相关资料,需要的朋友可以参考下
    2016-10-10
  • iOS实现百度外卖头像波浪的效果

    iOS实现百度外卖头像波浪的效果

    对于现在很多人来说,叫外卖就成了不可或缺的习惯。某日瞬间发现百度外卖的APP波浪效果很是吸引人,相比较其他的外卖APP,颜值略高些.(淘宝也有波浪的效果),遂就思考如何实现这种"浪"的效果,下面来一起看看。
    2016-08-08
  • IOS使用UICollectionView实现无限轮播效果

    IOS使用UICollectionView实现无限轮播效果

    这篇文章主要为大家详细介绍了IOS使用UICollectionView实现无限轮播效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03

最新评论