使用UIWindow

UIWindow并不包含任何默認(rèn)的內(nèi)容,但是它被當(dāng)作UIView的容器,用于放置應(yīng)用中所有的UIView。UIWindow更多的時(shí)候只作為UIView的頂層容器存在。
而我們最常用的方法咱枉,就是在程序剛啟動(dòng)時(shí),調(diào)用UIWindow的makeAndVisible方法徒恋,代碼如下:


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    ViewController *vc = [[ViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    return YES;
}```
我們可以在UIWindow做一些操作:

// 取得最上面的window self代表一個(gè)view
UIWindow *window = [[UIApplication sharedApplication].windows lastObject];
[window addSubview:self];

WindowLevel屬性
不是所有創(chuàng)建的UIWindow一定會(huì)覆蓋在界面的最上面蚕断,UIWindow有一個(gè)類型為“UIWindowLevel”的屬性,該屬性定義了UIWindow的層級(jí)入挣,系統(tǒng)定義的UIWindowLevel一共有3中取值:如下:

UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar

程序中默認(rèn)的UIWindow的層級(jí)是UIWindowLevelNormal亿乳。

手動(dòng)創(chuàng)建UIWindow

//創(chuàng)建UIWindown
_window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
_window.windowLevel = UIWindowLevelNormal;
_window.backgroundColor = [UIColor blueColor];
_window.hidden = NO;

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideUIWindown)];
[_window addGestureRecognizer:tap];

/**
隱藏UIWindown
*/

  • (void)hideUIWindown{
    _window.hidden = YES;
    _window = nil;
    }
在一個(gè)應(yīng)用程序中,想做一個(gè)密碼保護(hù)功能径筏,在用戶從應(yīng)用的任何界面按Home鍵退出葛假,過(guò)一段時(shí)間再?gòu)暮笈_(tái)切換回來(lái),顯示一個(gè)密碼輸入界面滋恬。只有用戶在輸入正確的密碼聊训,才能夠進(jìn)入退出的界面。因?yàn)檫@個(gè)密碼輸入界面可能從任何應(yīng)用界面彈出恢氯,并且需要蓋在所有界面的最上層带斑,所以它很適合用一個(gè)UIWindow來(lái)實(shí)現(xiàn)。

import "PasswordInputwindow.h"

@implementation PasswordInputwindow

  • (instancetype)shareInstance
    {
    static id shareInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    shareInstance = [[self alloc] initWithFrame:[UIScreen mainScreen].bounds];
    });
    return shareInstance;
    }
  • (instancetype)initWithFrame:(CGRect)frame
    {
    self = [super initWithFrame:frame];
    if (self) {
    UIViewController *vc = [[UIViewController alloc] init];
    vc.view.backgroundColor = [UIColor yellowColor];
    self.rootViewController = vc;

      UITextField *textfield = [[UITextField alloc] init];
      textfield.textColor = [UIColor blackColor];
      textfield.font = [UIFont systemFontOfSize:17];
      textfield.frame = CGRectMake(20, 120, [UIScreen mainScreen].bounds.size.width-40, 40);
      textfield.borderStyle = UITextBorderStyleRoundedRect;
      textfield.placeholder = @"在這里輸入密碼";
      [vc.view addSubview:textfield];
      
      UIButton *btn = [[UIButton alloc] init];
      [btn setTitle:@"隱藏界面" forState:UIControlStateNormal];
      [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
      btn.titleLabel.font = [UIFont systemFontOfSize:17];
      [btn sizeToFit];
      btn.center = CGPointMake([UIScreen mainScreen].bounds.size.width/2, [UIScreen mainScreen].bounds.size.height/2);
      [btn addTarget:self action:@selector(hideWindown:) forControlEvents:UIControlEventTouchUpInside];
      [vc.view addSubview:btn];
    

    }

    return self;
    }

  • (void)hideWindown:(UIButton *)sender{
    [self resignKeyWindow];
    self.hidden = YES;
    }

  • (void)show
    {
    [self makeKeyWindow];
    self.hidden = NO;
    }

  • (void)applicationDidBecomeActive:(UIApplication *)application {

    [[PasswordInputwindow shareInstance] show];
    }

如果我們創(chuàng)建的UIWindow需要處理鍵盤事件酿雪,那么就需要合理的將其設(shè)置為keywindow遏暴。keywindow是被系統(tǒng)設(shè)計(jì)用來(lái)接受鍵盤和其他非觸摸事件的UIWindow侄刽。我們可以通過(guò)makeKeyWindow和makeKeyAndVisible方法來(lái)將自己創(chuàng)建的UIWindow實(shí)例設(shè)置為keywindow指黎。支付寶客戶端的手勢(shì)解鎖功能,就是UIWindow的一個(gè)極好的應(yīng)用州丹。


/***  文中的知識(shí)摘自“iOS開發(fā)進(jìn)階”   ****/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末醋安,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子墓毒,更是在濱河造成了極大的恐慌吓揪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件所计,死亡現(xiàn)場(chǎng)離奇詭異柠辞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)主胧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門叭首,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)习勤,“玉大人,你說(shuō)我怎么就攤上這事焙格⊥急希” “怎么了居砖?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵烛卧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我生棍,道長(zhǎng)冬阳,這世上最難降的妖魔是什么蛤虐? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮肝陪,結(jié)果婚禮上笆焰,老公的妹妹穿的比我還像新娘。我一直安慰自己见坑,他們只是感情好嚷掠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荞驴,像睡著了一般不皆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熊楼,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天霹娄,我揣著相機(jī)與錄音,去河邊找鬼鲫骗。 笑死犬耻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的执泰。 我是一名探鬼主播枕磁,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼术吝!你這毒婦竟也來(lái)了计济?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤排苍,失蹤者是張志新(化名)和其女友劉穎沦寂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淘衙,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡传藏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毯侦。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡西壮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叫惊,到底是詐尸還是另有隱情款青,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布霍狰,位于F島的核電站抡草,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔗坯。R本人自食惡果不足惜康震,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宾濒。 院中可真熱鬧腿短,春花似錦、人聲如沸绘梦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卸奉。三九已至钝诚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間榄棵,已是汗流浹背凝颇。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疹鳄,地道東北人拧略。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瘪弓,于是被迫代替她去往敵國(guó)和親垫蛆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 二杠茬、使用UIWindow 1月褥、簡(jiǎn)介在iOS App中弛随,UIWindow是最頂層的界面內(nèi)容瓢喉,我們使用UIWindow...
    南華coder閱讀 2,735評(píng)論 0 9
  • 開發(fā)中可能經(jīng)常會(huì)遇到需要在TableView底部添加工具條的情況,如果直接在TableVIewController...
    字節(jié)碼閱讀 332評(píng)論 0 0
  • UIView的功能 負(fù)責(zé)渲染區(qū)域的內(nèi)容,并且響應(yīng)該區(qū)域內(nèi)發(fā)生的觸摸事件 UIWindow 在iOS App中舀透,UI...
    小蘑菇2閱讀 777評(píng)論 4 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理栓票,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • 我近期最想實(shí)現(xiàn)的一個(gè)愿望是:從德智體三方面培養(yǎng)兒子成為一個(gè)優(yōu)秀的人走贪,希望他能當(dāng)上“三好”學(xué)生佛猛。懷著輕松愉悅的心情,...
    以娟閱讀 133評(píng)論 0 0