iOS开发UINavigation系列二——UINavigationItem

iOS开发UINavigation系列二——UINavigationItem

1、引言

        UINavigationItem是导航栏上用于管理导航项的类,在上一篇博客中,咱们知道导航栏是经过push与pop的堆栈操做来对item进行管理的,一样,每个Item自身也有许多属性可供咱们进行自定制。这篇博客,主要讨论UINavigationItem的使用方法。ide

UINavigationBar:http://my.oschina.net/u/2340880/blog/527706字体

2、来讲说UINavigationItem

        Item,从英文上来理解,它能够解释为一个项目,所以,item不是一个简单的label标题,也不是一个简单的button按钮,它是导航栏中管理的一个项目的抽象。提及来有些难于理解,经过代码,咱们就能很好的理解Item的意义。atom

首先,咱们建立一个item,用UINavigationBar导航栏push出来:url

 UINavigationItem * item = [[UINavigationItem alloc]initWithTitle:@"title"];
 UINavigationBar * bar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 64)];
 [bar pushNavigationItem:item animated:YES];

咱们能够看到,在导航栏上的中间,有title这样一个item:spa

除了建立一个标题item,咱们也能够建立一个View类型的item:.net

        UIView * view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];
        view.backgroundColor = [UIColor brownColor];
        item.titleView = view;

效果以下:code

经过下面的属性,能够给这个Item添加一个说明文字,这段文字会显示在item的上方:对象

item.prompt= @"我是navigationItem的说明文字";

上面咱们看到的这些,实际上只是一个item的一部分,item还有许多其余的附件,若是咱们使导航栏再push出一个item,这时导航栏的左边会出现一个返回按钮,这个返回按钮其实是数据第一个item的,咱们作以下的设置:blog

        UINavigationItem * item = [[UINavigationItem alloc]initWithTitle:@"title"];
        UINavigationItem * item2 = [[UINavigationItem alloc]initWithTitle:@"title2"];
        item.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"title1" style:nil target:nil action:nil];
        [bar pushNavigationItem:item animated:YES];
        [bar pushNavigationItem:item2 animated:YES];

能够看出,虽然当前push出来的item是item2,可是左边的返回按钮是属于item的。这里有一点须要注意,虽然backBarButtonItem的标题咱们能够自定义,可是方法和其余属性咱们都不能定制,是系统实现好的。图片

固然,咱们也能够设置在push出来新的item的时候,隐藏前面的返回按钮,使用以下属性:

@property(nonatomic,assign) BOOL hidesBackButton;
- (void)setHidesBackButton:(BOOL)hidesBackButton animated:(BOOL)animated;

默认为NO,设置为YES将会隐藏返回按钮。

3、关于UIBarButtonItem

        一个UINavigationItem中,还能够包含许多BarButtonItem,BarButtonItem是一系列的按钮,会出如今导航栏的左侧或者右侧。例如:

        UIBarButtonItem * button = [[UIBarButtonItem alloc]initWithTitle:@"按钮" style:UIBarButtonItemStyleDone target:self action:@selector(click)];
        item.leftBarButtonItem = button;

这个barButtonItem是一个按钮,能够触发一个方法,这有时候对咱们来讲十分有用。可是有一个你必定发现了,若是继续push出来Item,原来的返回按钮不见了,是否隐藏返回按钮,由下面这个属性控制:

item.leftItemsSupplementBackButton=YES;

咱们也能够经过下面的方法设置右边的按钮,或者直接设置一组按钮:

@property(nullable, nonatomic,strong) UIBarButtonItem *leftBarButtonItem;
@property(nullable, nonatomic,strong) UIBarButtonItem *rightBarButtonItem;
- (void)setLeftBarButtonItem:(nullable UIBarButtonItem *)item animated:(BOOL)animated;
- (void)setRightBarButtonItem:(nullable UIBarButtonItem *)item animated:(BOOL)animated;

@property(nullable,nonatomic,copy) NSArray<UIBarButtonItem *> *leftBarButtonItems;
@property(nullable,nonatomic,copy) NSArray<UIBarButtonItem *> *rightBarButtonItems;
- (void)setLeftBarButtonItems:(nullable NSArray<UIBarButtonItem *> *)items animated:(BOOL)animated;
- (void)setRightBarButtonItems:(nullable NSArray<UIBarButtonItem *> *)items animated:(BOOL)animated;

4、再看UIBarButtonItem

        上面咱们了解到了,一个NavigationItem基本上是有三大部分组成的,当前显示的部分,返回按钮部分,和ButtonItem部分,一样对于建立和设置UIBarButoonItem,也有不少方法供咱们使用。

        首先是建立与初始化的方法:

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

这个方法经过一个标题建立ButtonItem,其中style参数能够设置一个风格,枚举以下:

typedef NS_ENUM(NSInteger, UIBarButtonItemStyle) {
    UIBarButtonItemStylePlain,
    UIBarButtonItemStyleDone,
};

这两种风格差异并不大,以下是效果,Done风格的字体加粗一些:

咱们由于能够经过一个图片来建立BarButtonItem:

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

上面这两个方法中,第一个方法与使用文字建立的方法相似,第二个方法多了一个landscapeImagePhone的参数,这个参数能够设置设备横屏时的图片。

咱们也可使用自定义的View来建立BarButtonItem:

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

除了上面一些自定义的建立方法外,对于BarButtonItem这个对象,系统也封装好了许多原生的能够供咱们使用,建立的时候使用以下方法:

UIBarButtonItem * button = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:nil];

上面的SystemItem是系统为咱们作好的许多buttonItem的类型,枚举以下:

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,//显示前进按钮
    UIBarButtonSystemItemUndo,//显示消除按钮
    UIBarButtonSystemItemRedo ,//显示重作按钮
    UIBarButtonSystemItemPageCurl ,//在tool上有效
};

专一技术,热爱生活,交流技术,也作朋友。

——珲少 QQ群:203317592

相关文章
相关标签/搜索