国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

[iOS基礎控件-6.10.7]UIWindow

2019-11-14 19:44:05
字體:
來源:轉載
供稿:網友
A.UIWindow概念
1.繼承UIView,是一種特殊的UIView
2.通常一個APP只有一個UIWindow
3.iOS程序啟動后,創(chuàng)建的第一個視圖就是UIWindow
4.沒有UIWindow,不能顯示任何東西
 
Image(187)
 
B.使用
1.創(chuàng)建一個Empty application項目
沒有了storyboard,要手動實現(xiàn)UIWindow的創(chuàng)建代碼(其實這就是storyboard做的事情)
1     // 手動創(chuàng)建UIWindow,并加到screen上2     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];3     self.window.backgroundColor = [UIColor whiteColor];4     [self.window makeKeyAndVisible];
 
2.創(chuàng)建一個控制器
Image(188)
 
3.把控制器的view添加到UIWindow
添加UIView到UIWindow中兩種常見方式:
- (void)addSubview:(UIView *)view;
直接將view添加到UIWindow中,但并不會理會view對應的UIViewController

@PRoperty(nonatomic,retain) UIViewController *rootViewController;
自動將rootViewController的view添加到UIWindow中,負責管理rootViewController的生命周期

常用方法
- (void)makeKeyWindow;
讓當前UIWindow變成keyWindow(主窗口)

- (void)makeKeyAndVisible;
讓當前UIWindow變成keyWindow,并顯示出來
 
(1)直接添加控制器的view到UIWindow
1     // 添加控制器2     ViewController *controller = [[ViewController alloc] init];3     [self.window addSubview:controller.view];
 
不建議此方法,因為
a.可能自定義控制器變量被銷毀之后,其view還在UIWindow中被使用,如果再使用控制器會引起崩潰
b.由于沒有傳自定義控制器給UIWindow,不能處理各種相關事件(例如屏幕旋轉)
Image(189)
 
(2)設置自定義控制器為UIWindow的rootViewController
設置了根控制器之后,會自動把自定義控制器的view加到UIWindow
1     // 添加控制器2     ViewController *controller = [[ViewController alloc] init];3 //    [self.window addSubview:controller.view];4     self.window.rootViewController = controller;
 
(3)在controller中設置狀態(tài)欄可視
1 - (BOOL)prefersstatusBarHidden {2     return NO;3 }
 
Image(190)
 
 
4.界面切換
其實是不同的控制器替換到UIWindow上面
改變self.window.rootViewController
 
 
C.app四大對象的關系
Image(191)
 
D.UIWindow的其他概念
1.主窗口
    a.獲得主窗口 [UIApplication sharedWindow].keyWindow
    b.可以通過makeKeyWindow設置主窗口,makeKeyAndVisible來設置主窗口兼可視
    c.一個屏幕只能有一個主窗口,使用最后更新(最后使用makeKeyWindow或者makeKeyAndVisible)的UIWindow為主窗口
    d.iOS7之前只有主窗口能夠處理TextField輸入事件,之后全部窗口都能處理
 
1     // 手動創(chuàng)建UIWindow,并加到screen上2     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];3     self.window.backgroundColor = [UIColor grayColor];4     [self.window makeKeyAndVisible]; // 此刻window是主窗口5    6     // 手動在.h文件中定義了一個window2,不能使用臨時變量,否則會被回收7     self.window2 = [[UIWindow alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];;8     self.window2.backgroundColor = [UIColor redColor];9     [self.window2 makeKeyAndVisible]; // 這時候window2是主窗口
 
Image(192)
 
2.屏幕上的所有窗口
[UIApplication sharedApplication].windows
在本應用中打開的UIWindow列表,這樣就可以接觸應用中的任何一個UIView對象
(平時輸入文字彈出的鍵盤,就處在一個新的UIWindow中)
 
[UIApplication sharedApplication].keyWindow
用來接收鍵盤以及非觸摸類的消息事件的UIWindow,而且程序中每個時刻只能有一個UIWindow是keyWindow。如果某個UIWindow內部的文本框不能輸入文字,可能是因為這個UIWindow不是keyWindow
 
view.window
獲得某個UIView所在的UIWindow
 
3.TextField呼出的鍵盤是一個獨立的window
 
 
 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泰顺县| 古交市| 遂溪县| 基隆市| 高清| 剑川县| 乐业县| 舞钢市| 铜陵市| 太康县| 平阳县| 潼关县| 新蔡县| 东台市| 镇原县| 庐江县| 蛟河市| 哈尔滨市| 滨州市| 巴南区| 图木舒克市| 闻喜县| 丹寨县| 交城县| 开平市| 靖安县| 巴楚县| 南木林县| 麻阳| 宜春市| 长汀县| 镇康县| 玉山县| 明星| 三原县| 郓城县| 雅江县| 晋州市| 莱州市| 新竹市| 龙井市|