广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-07 07:50:06 次阅读 稿源:互联网
    广告

    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 按钮旋转或暂停;
    最终效果展示:

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

    //
    // 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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告