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

相關文章
相關標籤/搜索