ios学习记录 day43 UI19 标签视图 和 block用法
Tab bar + Custom content = Tab bar controller
viewControllers 显示的视图控制器 tabBar 标签栏 delegate 代理
图片 1.大小限制 30*30 @2x的60*60
2.ios7以前 图片需要镂空
tabBar是UITabBarController对象包含多个tabBarItem 每一个tabBarItem对应一个viewController tabBar的高度是49 当tabBarItem超过5个 系统自动增加一个more按钮
一键设定所有导航视图控制器的颜色(QQ的一键换肤) 可以通过UIAppearance协议操作(这套协议系统已经帮助实现了,直接调用就行),可以对一些控件自定义颜色
Block:
是一种传值方式 可以替代协议
^声明block变量 内容包含在{} 以;结尾
定义 = 实现;
例如:
int mul = 7;
int(^myBlock)(int)=^(int num){return num * mul;};
返回类型(^Block变量名)(参数类型)=^(参数类型 参数名){return 实现;};
block所创建的变量分为两个内存区存储,分别是全局区和栈区,因此在IOS中如果使用block的成员变量或属性要将其copy到对内存中
//无返回值类型 无参数
-(void)testFirstBlock
{
void(^myBlock)()=^(){
NSLog(@"first test");
};
NSLog(@"zifuchuan");
myBlock();
}
打印结果:(执行的先后顺序)
zifuchuan
first test
//无返回类型 有参数类型
-(void)testSecondBlock:(int)num Str:(NSString *)str
{
void(^myBlock)(int,NSString *) =^(int number,NSString *string){
NSLog(@"num == %d,str == %@",number,string);
};
myBlock(num,str);
}
//有返回类型 有参数类型
-(void)testThiBlock
{
int(^myBlock)(NSString *,NSInteger) = ^(NSString *str,NSInteger num){
int strValue = [str intValue];
return strValue+num;
};
int a = myBlock(@"12",8);
NSLog(@"a == %d",a);
}
//高级块语法
MainViewController.h
#import <UIKit/UIKit.h>
//定义一个Block类型 ^后面首字母大写
typedef void(^Block)(UIColor *);
@interface FirstViewController : UIViewController
//定义属性 用copy!!! 没有*
@property (nonatomic,copy) Block testBlock;
@end
MainViewController.m
-(void)dealloc
{
//如果是成员变量就要先Block_copy
Block_release(_testBlock);
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationController.navigationBar.translucent = NO;
[self testColorBlock];
self.testBlock([UIColor redColor]);
}
-(void)testColorBlock
{
void (^myBlock)(UIColor *) = ^(UIColor *color){
[self.view setBackgroundColor:color];
};
self.testBlock = myBlock;
}
1.网络请求最后的返回用块语法
2.基于TabBarController 将通讯录 相册(NSTimer 1秒滚动) 多彩涂鸦 手势捏合(UIImageview)