1、makeKeyWindow、makeKeyAndVisible
keyWindow是指主窗口
makeKeyWindow:把當(dāng)前UIWindow作為主窗口;
makeKeyAndVisible:把當(dāng)前UIWindow作為主窗口,并顯示出來(lái);
2、UIViewAutoresizing
UIViewAutoresizing是一個(gè)枚舉類型,用于UIView適配
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0, //默認(rèn)值,不會(huì)隨父視圖的改變而改變
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,//自動(dòng)調(diào)整view與父視圖左邊距,以保證右邊距不變
UIViewAutoresizingFlexibleWidth = 1 << 1,//自動(dòng)調(diào)整view的寬度,保證左邊距和右邊距不變
UIViewAutoresizingFlexibleRightMargin = 1 << 2,//自動(dòng)調(diào)整view與父視圖右邊距,以保證左邊距不變
UIViewAutoresizingFlexibleTopMargin = 1 << 3,//自動(dòng)調(diào)整view與父視圖上邊距,以保證下邊距不變
UIViewAutoresizingFlexibleHeight = 1 << 4,//自動(dòng)調(diào)整view的高度,以保證上邊距和下邊距不變
UIViewAutoresizingFlexibleBottomMargin = 1 << 5//自動(dòng)調(diào)整view與父視圖的下邊距,以保證上邊距不變
};
使用示例:
self.mainTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
3、imageNamed與imageWithContentsOfFile區(qū)別
兩者都是用于實(shí)例化UIImage
imageName在使用的時(shí),系統(tǒng)會(huì)cache并管理cache,對(duì)于重復(fù)加載的圖像,速度會(huì)提升很多,這樣反而用戶體驗(yàn)好,但是圖片不宜過(guò)大;
imageWithContentsOfFile在使用完成后,不會(huì)緩存,適用于不常使用的圖片(如開啟啟動(dòng)頁(yè))
imageName基于assets中取圖片;
imageWithContentsOfFile基于Bundle取圖片,要求圖片不能放在assets中;
4、IBAction
該關(guān)鍵字用于告知Interface Builder,此方法是一個(gè)操作,且可以被某個(gè)控件觸發(fā);
示例:
-(IBAction) greenClick{
NSLog(@"綠色點(diǎn)擊");
}
添加關(guān)鍵字后,該方法左側(cè)出現(xiàn)一個(gè)圓圈,可以用來(lái)與某控件連接,如Button
5、IBOutlet
關(guān)鍵字IBOutlet 是一個(gè)對(duì)象屬性,用于引用另一個(gè)對(duì)象。
該關(guān)鍵字用于告知 Interface Builder,在包含 IBOutlet 聲明的對(duì)象與引用對(duì)象之間建立連接。
示例:
@property (nonatomic , weak) IBOutlet UILabel *label;
添加關(guān)鍵字后,該方法左側(cè)出現(xiàn)一個(gè)圓圈,可以用來(lái)與storyboard上的UILabel控件
6、Xib(x指xml,ib指interface build)
.xib編譯后為.nib;
.xib用于描述UI界面,可以是Controller,也可以是UIView;
.xib常用于描述局部界面,如:自定義控件(自定義控件時(shí),可通過(guò)class關(guān)聯(lián)代碼類)
.xib可以放置多組控件,使用時(shí)獲取出來(lái)是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
自定義控件時(shí),會(huì)用到3個(gè)系統(tǒng)方法:initWithFrame、initWithCoder、awakeFromNib
initWithFrame,如果控件是從代碼[[XibShow alloc] initWithFrame方式創(chuàng)建的,會(huì)執(zhí)行initWithFrame方法,從xib、storyboard中創(chuàng)建時(shí),不會(huì)執(zhí)行該方法;
initWithCoder,如果控件是從xib、storyboard中創(chuàng)建時(shí),會(huì)執(zhí)行該方法;
awakeFromNib,該方法是在initWithCoder之后調(diào)用;
8、頁(yè)面布局
頁(yè)面布局通常包含三種方式:手寫代碼、xib、storyboard
1、xib通常用于封裝控件,也可用于頁(yè)面布局;
2、storyboard主要用于頁(yè)面布局,可包含多個(gè)View Controller,描述多VC直接的關(guān)系;
xib用于頁(yè)面布局時(shí),controller名稱與xib名稱最好一致,不然加載不到;
9、頁(yè)面跳轉(zhuǎn)
跳轉(zhuǎn)示例:
xib跳轉(zhuǎn):
BViewController* bc = [[BViewController alloc]init];
bc.bprotocol = self;
bc.param = @"這是主頁(yè)面參數(shù)";
[self presentViewController:bc animated:true completion:nil];
storyboard跳轉(zhuǎn):
UIStoryboard* usb = [UIStoryboard storyboardWithName:@"AStoryboard" bundle:nil]; AViewController* ac = [usb instantiateViewControllerWithIdentifier:@"AViewController"];
ac.block = ^(NSString *str) {
NSLog(@"A頁(yè)面協(xié)議回調(diào):%@",str);
};
ac.param = @"這是主頁(yè)面參數(shù)";
[self presentViewController:ac animated:true completion:nil];
10、頁(yè)面間參數(shù)傳遞
示例:A頁(yè)面 ---> B頁(yè)面 --> C頁(yè)面
1、A --> B , 可在B頭文件中定義屬性,A傳屬性即可;
2、B --> A ,可在B頭文件中定義協(xié)議、協(xié)議屬性,B調(diào)用協(xié)議中定義的方法,回傳參數(shù),
A的Controller實(shí)現(xiàn)協(xié)議,重寫協(xié)議方法,接收B的數(shù)據(jù)(類似于Android的接口回調(diào))
3、B --> A, 可在B頭文件中定義block回調(diào)、block屬性,B通過(guò)block屬性回傳參數(shù),
A直接通過(guò)B的block屬性接收B回傳的數(shù)據(jù);
4、C --> A , 跨頁(yè)面,可通過(guò)通知實(shí)現(xiàn);