自定義UITabBarItem
自定義導航欄和標籤欄背景圖片
三個視圖控制器的綜合使用
一. 標籤視圖控制器 UITabBarController
UITabBarController有以下重要屬性
viewControllers 顯示的視圖控制器
tabBar 標籤欄
delegate 協議
tabBar 是 UITabBar對象, 包含多個UITabBarItem, 每個tanBarItem對應一個viewController. tabBar高度爲49
當tabBarItem超過五個時, 系統會自動增加一個更多按鈕,點擊更多按鈕,沒有在底部出現的那些按鈕會以列表形式顯示出來
UIAppearance
如果想通過一鍵設定所有導航視圖控制器的顏色,類似於QQ的一鍵換膚操作, 可以通過UIAppearance協議來進行操作, 通過它可以對一些控件進行自定義顏色等
總結
UITabBarController是項目開發中常見的佈局樣式,與UINavigationController不同,它的viewController都是並列的,而UINavigationController的則是層次性的
UITabBatController,UINavigationController和UITableViewController,通常都是組合出現,這種佈局方式特別常見,一定要熟練應用
UITabBarController可以嵌套UINavigationController
UINavigationController也可以嵌套UITabBatController
IOS Block用法
在IOS中,定義 用" ^ "來表明block變量, 內容是包含在" {}"中的,並且和C語言一樣,用" ; "來表示語句的結束
int multiplier = 7;
int (^myBlock)(int) = ^(int num){return num * multiplier; };
"^"聲明這是一個block, "myBlock"爲變量名
block返回值類型爲int類型
int 爲參數類型
等號前爲聲明 = 等號後是實現
等號後以^開始
int num 爲參數 和 參數名
{實現 方法;};
//調用塊語法的時候纔會走
-(void)testFirstBlock
{
//無參數無返回值類型的Block
void (^myBlock)() = ^(){
NSLog(@"走了");
};
//調用
myBlock();
}
-(void)testSecondBlock
{
//無參數有返回值類型的Block
void(^myBlock)(NSString *) = ^(NSString * name){
NSLog(@"name == %@",name);
};
myBlock(@"aaaa");
}
-(void)testThirdBlock
{
//多個參數 順序必須前後一致
void(^myBlock)(NSString *,int) = ^(NSString * name,int age){
NSLog(@"name === %@",name);
NSLog(@"age == %d",age);
};
myBlock(@"aa",7);
}
-(void)testForthBlock
{
//有參數有返回值類型的Block
int(^myBlock)(NSString *,NSInteger) = ^(NSString * value,NSInteger num){
//字符串轉化成int類型
int strValue = [value intValue];
return strValue+num;
};
int a = myBlock(@"15",5);
NSLog(@"a === %d",a);
}
Block注意事項
由於block所創建的變量分爲兩個內存區域,分別是全局區和棧區,因此在IOS中如果使用block的成員變量或者屬性時,需要將其copy到堆內存中.