标签视图控制器 - UITabBarController
自定义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 为参数 和 参数名
{实现 方法;};
自定义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到堆内存中.