手机
当前位置:查字典教程网 >编程开发 >IOS开发 >详解iOS应用中自定义UIBarButtonItem导航按钮的创建方法
详解iOS应用中自定义UIBarButtonItem导航按钮的创建方法
摘要:iOS系统导航栏中有leftBarButtonItem和rightBarButtonItem,我们可以根据自己的需求来自定义这两个UIBar...

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 按钮旋转或暂停;

最终效果展示:

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

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

就是那个音符图形的旋转。

关键代码展示(已加注释):

复制代码 代码如下:

//

// 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应用中自定义UIBarButtonItem导航按钮的创建方法】相关文章:

iOS多线程应用开发中自定义NSOperation类的实例解析

举例讲解iOS应用开发中hitTest触摸事件的编写方法

iOS应用开发中使UITextField实现placeholder属性的方法

iOS的UI开发中Button的基本编写方法讲解

iOS应用开发中UIScrollView滚动视图的基本用法总结

详解在iOS App中自定义和隐藏状态栏的方法

详解iOS App开发中UIViewController的loadView方法使用

详解iOS App中UITableView的创建与内容刷新

详解iOS开发中使用storyboard创建导航控制器的方法

iOS应用中UISearchDisplayController搜索效果的用法

精品推荐
分类导航