閒來無事便在網上google&baidu了一番UINavigationController的相關文章,而後又看了下官方文檔;看看更新到iOS7以後UINavigationController的是否有變化,同時也再溫故下UINavigationController的使用0.0 平時都是用的自定義的導航欄別到時連繫統本身的都不會用了-。-
這裏不介紹UINavigationController的使用,其實這個大部分狀況下也只是用於頁面的跳轉就行了;如今我就記錄一些平時沒怎麼注意到的和還蠻重要的屬性,加之理一下層次關係;主要做用仍是爲了本身不記得時好查看一下好了0.0
通常來講應該是UINavigationController包含UINavigationBar和UIToolbar;而後UINavigationBar中又包含了若干個UINavigationItem;UIToolbar也包含如干個UIBarButtonItem的。這個確實如此,不過在UIViewController的擴張類中有navigationItem和toolbarItems的屬性能夠管理UINavigationController裏面定義的UINavigationItem和UIToolbar。
注意:這裏UIBarButtonItem是專門針對一個的UIToolbar或者UINavigationBar對象放置在一個按鈕。
navigationBar默認 是顯示的,而toolbarHidden則是默認隱藏的,如需更改顯示狀態的話能夠調用如下代碼來實現,這兩個都是UINavigationController下定義的屬性,同時也有對應的設置方法的。
代碼中設置:
self.navigationController.navigationBarHidden = YES;
self.navigationController.toolbarHidden = NO;
下面根據不一樣的對象來介紹UINavigationController相關的一些類:
//UINavigationBar
好吧,到如今爲止在使用UINavigationController的時候我是不多不多使用到UINavigationBar來進行相關設置的,不少的時候都是直接跳過self.navigationItem來管理的。不過在使用系統NavgationController的時候有些屬性仍是頗有用的,記錄下:
//titleTextAttributes(ios5.0之後可用)這是UINavigationBar的一個屬性,經過它你能夠設置title部分的字體、字號、陰影等
@property(nonatomic,copy) NSDictionary *titleTextAttributes NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
//UINavigationBar的這個屬性能夠設置navigation的內容和其中的按鈕的顏色
@property(nonatomic,retain) UIColor *tintColor;
代碼調用:
NSDictionary *dict = [NSDictionary dictionaryWithObject:[UIColor redColor] forKey:UITextAttributeTextColor];
self.navigationController.navigationBar.titleTextAttributes = dict;
self.navigationItem.hidesBackButton = YES;
self.navigationController.navigationBar.tintColor = [UIColor greenColor];
//UINavigationItem
一般狀況下咱們在某個視圖控制器中會經過self.navigationItem來管理系統的UINavigationController中的導航欄中的內容,UINavigationItem下的不少屬性都是很常會用到的:
@property(nonatomic,copy) NSString *title; //導航欄的標題
@property(nonatomic,retain) UIView *titleView; //導航欄的自定義視圖,設定以後title就沒效果了
@property(nonatomic,copy) NSString *prompt; //設置了這個屬性值以後,導航欄會加高30,在導航欄標題上方顯示該值
@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;//自定義導航欄的左按鈕,默認是返回按鈕
@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;//自定義導航欄的左按鈕,默認是沒有東西顯示
//代碼示例以下
self.navigationItem.title = @"Root"; //設置標題,其實效果和self.title = @"Root";差很少
self.navigationItem.prompt =@"prompt test";
//在導航欄中添加segment
NSArray *array = [NSArray arrayWithObjects:@"12",@"34", nil];
UISegmentedControl *segmentedController = [[UISegmentedControl alloc] initWithItems:array];
segmentedController.segmentedControlStyle = UISegmentedControlSegmentCenter;
[segmentedController addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
self.navigationItem.titleView = segmentedController;
//左按鈕
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(selectLeftAction:)];
self.navigationItem.leftBarButtonItem = leftButton;
//右按鈕
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(selectRightAction:)];
self.navigationItem.rightBarButtonItem = rightButton;
//下面這兩個屬性設置可同時設置多個左、右按鈕,設置方法和單個的差很少,只是先給歸類到一個數組中;不過最好不要和設置單個的混合使用
@property(nonatomic,copy) NSArray *leftBarButtonItems NS_AVAILABLE_IOS(5_0);//設置多個左按鈕,從左往右排列
@property(nonatomic,copy) NSArray *rightBarButtonItems NS_AVAILABLE_IOS(5_0);//設置多個左按鈕,從右往左排列
代碼示例:
self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:leftButton,leftButton1, nil];
//UIToolbar
通常咱們也都是沒用這個系統的工具欄的,不過這裏也列一下好了0.0
UIToolbar一些屬性咱們也基本沒使用,差很少就看做是存放多個UIBarButtonItem的容器好了,同時也大多使用UIViewController的擴張屬性toolbarItems來管理好了,直接跳過UIToolbar。
使用的時候先要設置顯示工具欄,默認是隱藏的額,而後就能夠加入多個UIBarButtonItem了,通常當UIButton使用好了
//代碼示例:
self.navigationController.toolbarHidden = NO;
UIBarButtonItem *one = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil];
UIBarButtonItem *two = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:nil action:nil];
UIBarButtonItem *three = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:nil];
UIBarButtonItem *four = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:nil action:nil];
//這個可以使UIBarButtonItem自適應排列
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[self setToolbarItems:[NSArray arrayWithObjects:flexItem, one, flexItem, two, flexItem, three, flexItem, four, flexItem, nil]];