1、makeKeyWindow、makeKeyAndVisible
keyWindow是指主窗口
makeKeyWindow:把当前UIWindow作为主窗口;
makeKeyAndVisible:把当前UIWindow作为主窗口,并显示出来;
2、UIViewAutoresizing
UIViewAutoresizing是一个枚举类型,用于UIView适配
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0, //默认值,不会随父视图的改变而改变
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,//自动调整view与父视图左边距,以保证右边距不变
UIViewAutoresizingFlexibleWidth = 1 << 1,//自动调整view的宽度,保证左边距和右边距不变
UIViewAutoresizingFlexibleRightMargin = 1 << 2,//自动调整view与父视图右边距,以保证左边距不变
UIViewAutoresizingFlexibleTopMargin = 1 << 3,//自动调整view与父视图上边距,以保证下边距不变
UIViewAutoresizingFlexibleHeight = 1 << 4,//自动调整view的高度,以保证上边距和下边距不变
UIViewAutoresizingFlexibleBottomMargin = 1 << 5//自动调整view与父视图的下边距,以保证上边距不变
};
使用示例:
self.mainTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
3、imageNamed与imageWithContentsOfFile区别
两者都是用于实例化UIImage
imageName在使用的时,系统会cache并管理cache,对于重复加载的图像,速度会提升很多,这样反而用户体验好,但是图片不宜过大;
imageWithContentsOfFile在使用完成后,不会缓存,适用于不常使用的图片(如开启启动页)
imageName基于assets中取图片;
imageWithContentsOfFile基于Bundle取图片,要求图片不能放在assets中;
4、IBAction
该关键字用于告知Interface Builder,此方法是一个操作,且可以被某个控件触发;
示例:
-(IBAction) greenClick{
NSLog(@"绿色点击");
}
添加关键字后,该方法左侧出现一个圆圈,可以用来与某控件连接,如Button
5、IBOutlet
关键字IBOutlet 是一个对象属性,用于引用另一个对象。
该关键字用于告知 Interface Builder,在包含 IBOutlet 声明的对象与引用对象之间建立连接。
示例:
@property (nonatomic , weak) IBOutlet UILabel *label;
添加关键字后,该方法左侧出现一个圆圈,可以用来与storyboard上的UILabel控件
6、Xib(x指xml,ib指interface build)
.xib编译后为.nib;
.xib用于描述UI界面,可以是Controller,也可以是UIView;
.xib常用于描述局部界面,如:自定义控件(自定义控件时,可通过class关联代码类)
.xib可以放置多组控件,使用时获取出来是NSArray格式,获取方式:
方式1:
NSArray* array = [[NSBundle mainBundle]loadNibNamed:@"TestXib1" owner:nil options:nil];
[self.view addSubview:array[0]];
方式2:
UINib *nib = [UINib nibWithNibName:@"TestXib1" bundle:[NSBundle mainBundle]];
NSArray* array = [nib instantiateWithOwner:nil options:nil];
[self.view addSubview:array[0]];
7、initWithFrame、initWithCoder、awakeFromNib
自定义控件时,会用到3个系统方法:initWithFrame、initWithCoder、awakeFromNib
initWithFrame,如果控件是从代码[[XibShow alloc] initWithFrame方式创建的,会执行initWithFrame方法,从xib、storyboard中创建时,不会执行该方法;
initWithCoder,如果控件是从xib、storyboard中创建时,会执行该方法;
awakeFromNib,该方法是在initWithCoder之后调用;
8、页面布局
页面布局通常包含三种方式:手写代码、xib、storyboard
1、xib通常用于封装控件,也可用于页面布局;
2、storyboard主要用于页面布局,可包含多个View Controller,描述多VC直接的关系;
xib用于页面布局时,controller名称与xib名称最好一致,不然加载不到;
9、页面跳转
跳转示例:
xib跳转:
BViewController* bc = [[BViewController alloc]init];
bc.bprotocol = self;
bc.param = @"这是主页面参数";
[self presentViewController:bc animated:true completion:nil];
storyboard跳转:
UIStoryboard* usb = [UIStoryboard storyboardWithName:@"AStoryboard" bundle:nil]; AViewController* ac = [usb instantiateViewControllerWithIdentifier:@"AViewController"];
ac.block = ^(NSString *str) {
NSLog(@"A页面协议回调:%@",str);
};
ac.param = @"这是主页面参数";
[self presentViewController:ac animated:true completion:nil];
10、页面间参数传递
示例:A页面 ---> B页面 --> C页面
1、A --> B , 可在B头文件中定义属性,A传属性即可;
2、B --> A ,可在B头文件中定义协议、协议属性,B调用协议中定义的方法,回传参数,
A的Controller实现协议,重写协议方法,接收B的数据(类似于Android的接口回调)
3、B --> A, 可在B头文件中定义block回调、block属性,B通过block属性回传参数,
A直接通过B的block属性接收B回传的数据;
4、C --> A , 跨页面,可通过通知实现;