iOS開發UINavigation系列二——UINavigationItem

來源:互聯網
上載者:User

標籤:

iOS開發UINavigation系列二——UINavigationItem 一、引言

        UINavigationItem是導覽列上用於管理導航項的類,在上一篇部落格中,我們知道導覽列是通過push與pop的堆棧操作來對item進行管理的,同樣,每一個Item自身也有許多屬性可供我們進行自定製。這篇部落格,主要討論UINavigationItem的使用方法。

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

二、來說說UINavigationItem

        Item,從英文上來理解,它可以解釋為一個項目,因此,item不是一個簡單的label標題,也不是一個簡單的button按鈕,它是導覽列中管理的一個項目的抽象。說起來有些難於理解,通過代碼,我們就能很好的理解Item的意義。

首先,我們建立一個item,用UINavigationBar導覽列push出來:

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

我們可以看到,在導覽列上的中間,有title這樣一個item:

除了建立一個標題item,我們也可以建立一個View類型的item:

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

效果如下:

通過下面的屬性,可以給這個Item添加一個解說文字,這段文字會顯示在item的上方:

item.prompt= @"我是navigationItem的解說文字";

上面我們看到的這些,實際上只是一個item的一部分,item還有許多其他的附件,如果我們使導覽列再push出一個item,這時導覽列的左邊會出現一個返回按鈕,這個返回按鈕實際上是資料第一個item的,我們做如下的設定:

        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將會隱藏返回按鈕。

三、關於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;
四、再看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上有效};


iOS開發UINavigation系列二——UINavigationItem

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.