UINavigationItem是導航欄上用於管理導航項的類,在上一篇博客中,咱們知道導航欄是經過push與pop的堆棧操做來對item進行管理的,一樣,每個Item自身也有許多屬性可供咱們進行自定製。這篇博客,主要討論UINavigationItem的使用方法。ide
UINavigationBar:http://my.oschina.net/u/2340880/blog/527706。字體
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將會隱藏返回按鈕。
一個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;
上面咱們瞭解到了,一個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