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;
自定义rightBarButtonItem,代码如下:
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(right:)];
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 };
- (void)right:(id)sender { NSLog(@"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, };
- (void)back:(id)sender { [self.navigationController popViewControllerAnimated:YES]; }
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"test"] style:UIBarButtonItemStylePlain target:self action:@selector(right:)];
自定义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 按钮旋转或暂停;
最终效果展示:
就是那个音符图形的旋转。
关键代码展示(已加注释):
// // 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
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。