UIWindow

UIWindow基本使用

  • ios程序啟動完畢后,創(chuàng)建的第一個視圖控件就是UIWindow
  • 如果指定了main,系統(tǒng)會自動幫你做下面的操作,如果沒有指定,那么久需要手動創(chuàng)建
//創(chuàng)建一個Window
self.window = [UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor orangeColor];
//設置窗口的根控制器
UIViewController * vc= [UIViewController alloc]init];
vc.backgroundColor = [UIColor blueColor];
window.rootViewController = vc;
//顯示窗口
[window makeKeyAndVisible];

makeKeyAndVisible內部的實現?

  • 成為主窗口

    • 能夠彈出鍵盤的窗口就是主窗口
    • [UIApplication sharedApplication].keyWindow過完makeKeyAndVisible這個方法之后,才有值【給keyWindow賦值】
    • 只調用[self.window makeKeyWindow]窗口不會顯示出來
  • 讓窗口顯示出來

    • self.window在這個方法之前打印有一個hidden = yes,默認是隱藏
    • makeKeyAndVisible會把窗口的hidden屬性改為NO,
    • 在hidden = NO的過程當中,會把窗口的根控制的view添加到窗口上去,成為window的子控件,keyWindow還是為nil

鍵盤和狀態(tài)欄都是UIWindow

  • 鍵盤

  • 創(chuàng)建窗口

    • self.window= alloc/initWithFrame:
  • 設置窗口的根控制器

    • self.window.rootViewConroller
  • 顯示窗口

    • makeKeyAndVisible
  • 彈出鍵盤

    • UITextField * textF = [UITextField alloc]init]
    • [textF becomeFirstResponder]
    • 想要彈出鍵盤,textF必須要添加到另一個view上面
    • [vc.view addSubviews:textF]
  • 狀態(tài)欄

  • 創(chuàng)建窗口

    • self.window1 = [UIWindow alloc]initWithFrame:
  • 設置窗口的根控制器

    • rootViewController
  • 顯示窗口

    • makeKeyAndVisible
  • ios9中,如果有多個窗口,控制器會自動隱藏狀態(tài)欄

  • ios10之后就不會出現這種狀況

  • 狀態(tài)欄也是窗口,狀態(tài)欄窗口的級別默認是高于自己創(chuàng)建的窗口的級別的(windowLevel)

    • UIWindowLevelNormal<UIWindowLevelStatusBar<UIWindowLevelAlert
    • 鍵盤的級別最高

通過storyboard加載控制器(掌握)

  • 怎么通過storyboard加載的控制器?
    • 創(chuàng)建一個窗口
    • 設置窗口的根控制器
      • 把main.storyboard中,箭頭指向的控制器設置為窗口的根控制器

      • 加載main.storyboard

        • UIStoryboard storyboardWithName:bundle:
        • nil,默認就是mainBundle
      • storyboard中加載箭頭指向的控制器vc

        • 借助storyboard對象創(chuàng)建控制器
        • instantiateInitialViewController
      • 加載指定標識的控制器vc2

        • instantiateInitialViewControllerWithIdentifier:
        • indentifier ID
      • 設置窗口的根控制器vc/vc2

    • 顯示窗口
  • 通過自定義的storyboard加載控制器
    • storyboard中拖入控制器
    • is initial 勾選上
    • info.plist中設定main storyboard file base 改為自定義的類型的名稱
    • 或者自己創(chuàng)建窗口,設置窗口根控制器,顯示窗口
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • UIView專題 1UIWindow 1.1UIWindow簡介 UIWindow是一種特殊的UIView,通常在...
    Kevin_Junbaozi閱讀 1,635評論 0 4
  • UIWindow 1.什么是UIWindow?官方文檔解釋窗口和屏幕,尺寸 2.之前都沒有創(chuàng)建UIWindow,怎...
    SoManyDumb閱讀 387評論 0 0
  • 1.UIWindow簡介 UIWindow是一種特殊的UIView,通常在一個app中至少會有一個UIWindow...
    xx_cc閱讀 16,390評論 5 40
  • 前言 最近在做一個通知彈框的需求,應用到了UIWindow,之前沒有研究過,趁著這次機會了解下UIWindow。簡...
    WQ_UESTC閱讀 1,977評論 0 3
  • UIWindow 基本概念一個iOS程序之所以能顯示到屏幕上,完全是因為它有UIWindow,是一種特殊的UIVi...
    馬文濤閱讀 7,560評論 2 7

友情鏈接更多精彩內容