iOS學(xué)習(xí)筆記——UIViewController學(xué)習(xí)

視圖控制器的概念

  • 視圖控制器就像個(gè)大管家,用來(lái)管理視圖的加載寿羞、卸載芹橡、橫屏豎屏顯示等操作前弯。
  • 每一個(gè)界面都應(yīng)該由一個(gè)控制器來(lái)管理顯示。
  • UIViewController是所有視圖控制器的父類(lèi)修肠。
  • iOS提供了許多內(nèi)置的視圖控制器類(lèi),以支持標(biāo)準(zhǔn)的用戶(hù)界面部分,比如導(dǎo)航控制器(UINavigationController),標(biāo)簽欄控制器(UITabBarController),表視圖控制器(UITableViewController)等

視圖控制器與視圖的關(guān)系

  • 視圖控制器是傳統(tǒng)的Model-View-Controller(MVC)設(shè)計(jì)模式中 —— 控制器
  • UIViewController提供了許多控制器的基本功能,因?yàn)樗撬锌刂破鞯幕?lèi)
  • 視圖控制器負(fù)責(zé)創(chuàng)建和管理一組視圖,它本身就提供了一個(gè)視圖,稱(chēng)為該控制器的根視圖(view),協(xié)調(diào)管理數(shù)據(jù)和視圖之間的交互

視圖控制器的根視圖創(chuàng)建方式

//視圖控制器是通過(guò)loadView方法創(chuàng)建的根視圖
//loadView方法調(diào)用的前提條件:
// 1贺辰、當(dāng)前視圖控制器的根視圖為空
// 2、通過(guò)getter方法訪問(wèn)當(dāng)前控制器的根視圖
- (void) loadView {
  //創(chuàng)建每個(gè)控制器的根視圖
  UIView *rootView = [[UIView alloc] initWithFrame: [UIScreen mainScreen].ApplicationFrame];
  self.view = rootView;
  self.view.backgroundColor = [UIColor redColor];
  //初始化其他視圖...
}

模態(tài)視圖

  • 通過(guò)視圖控制器的presentModalViewController: 方法彈出的視圖我們都稱(chēng)為模態(tài)視圖
  • 模態(tài)視圖出現(xiàn)的場(chǎng)景一般是臨時(shí)彈出的窗口,譬如:登陸窗口
  • 模態(tài)視圖彈出時(shí)通過(guò)modalTransitionStyle屬性設(shè)置不同的動(dòng)畫(huà)效果
  • 調(diào)用 dismissModalViewControllerAnimated: 方法關(guān)閉窗口
  //創(chuàng)建視圖控制器
  ModalViewController *mViewCtrl =[ [ModalViewController alloc] init];
  //設(shè)置視圖彈出時(shí)的動(dòng)畫(huà)效果
  mc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
  //通過(guò)模態(tài)視圖的形式打開(kāi)視圖控制器
  [self presentModalViewController:mViewCtrl animated:YES];

模態(tài)視圖的原理

  • 我們用 presentModalViewController: animated:打開(kāi)一個(gè)控制器,是把當(dāng)前控制器的根視圖添加到window上,我們都知道根視圖控制器不做顯示
  • 而且我們通過(guò)設(shè)置當(dāng)前控制器的根視圖為透明時(shí),視圖下面顯示的時(shí)window,說(shuō)明上一個(gè)控制器的根視圖已經(jīng)從window上移除掉了,那么我們知道原理是否可以自己寫(xiě)一個(gè)方法彈出視圖,并添加我們自己想要的動(dòng)畫(huà)效果
  //將要顯示的視圖控制器
  ModalViewController *modelVC = [[ModalViewController alloc]init];
  //把視圖控制器里面的根視圖添加的window上
  [self.view.window addSubview:modelVC.view];
  //添加動(dòng)畫(huà)效果
  modelVC.view.frame = CGRectMake(320, 20, 320, self.view.frame.size.height);  
  [UIView beginAnimations:nil context:nil];
  [UIView setAnimationDuration:.35];
  self.view.frame = CGRectMake(-320, 20, 320, self.view.frame.size.height);
  modelVC.view.frame = CGRectMake(0, 20, 320, self.view.frame.size.height);
  [UIView commitAnimations];

模態(tài)視圖的使用場(chǎng)景

  • 1嵌施、收集用戶(hù)輸入信息

  • 2饲化、臨時(shí)呈現(xiàn)一些內(nèi)容

  • 3、臨時(shí)改變工作模式

  • 4吗伤、顯示一個(gè)新的view層級(jí)

  • 這幾種情形都會(huì)暫時(shí)中斷程序正常的執(zhí)行流程,主要作用是收集或者顯示一些信息滓侍。

  • Presenting 和 Presented

    • 當(dāng)我們?cè)赩iew Controller A中模態(tài)顯示View Controller B的時(shí)候,A就充當(dāng)Presenting View Controller(彈出VC),而B(niǎo)就是Presented ViewController(被彈出VC)。
    • 官方文檔建議這兩者之間通過(guò)delegate實(shí)現(xiàn)交互,因此我們?cè)趯?shí)際應(yīng)用中,最好也遵守這個(gè)原則,在被彈出的VC中定義delegate,然后在彈出VC中實(shí)現(xiàn)該代理,這樣就可以比較方便的實(shí)現(xiàn)兩者之間的交互牲芋。

UIViewController控制視圖的常用方法

//創(chuàng)建載入根視圖
- (void) loadView;
//視圖載入完成
- (void) viewDidLoad;
//視圖將出現(xiàn)在屏幕前
- (void) viewWillAppear:(BOOL)animated;
//視圖已經(jīng)在屏幕上渲染完成
- (void) viewDidAppear:(BOOL)animated;
//視圖將被從屏幕上移除之前執(zhí)行
- (void) viewWillDisappear:(BOOL)animated;
//視圖已經(jīng)從屏幕上移除
- (void) viewDidDisappear:(BOOL)animated;
//接受到內(nèi)存警告
- (void) didReceiveMemoryWarning;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撩笆,一起剝皮案震驚了整個(gè)濱河市捺球,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夕冲,老刑警劉巖氮兵,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異歹鱼,居然都是意外死亡泣栈,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)弥姻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)南片,“玉大人,你說(shuō)我怎么就攤上這事庭敦√劢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵秧廉,是天一觀的道長(zhǎng)伞广。 經(jīng)常有香客問(wèn)我,道長(zhǎng)疼电,這世上最難降的妖魔是什么嚼锄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蔽豺,結(jié)果婚禮上区丑,老公的妹妹穿的比我還像新娘。我一直安慰自己修陡,他們只是感情好刊苍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著濒析,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啥纸。 梳的紋絲不亂的頭發(fā)上号杏,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音斯棒,去河邊找鬼盾致。 笑死,一個(gè)胖子當(dāng)著我的面吹牛荣暮,可吹牛的內(nèi)容都是我干的庭惜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼穗酥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼护赊!你這毒婦竟也來(lái)了惠遏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骏啰,失蹤者是張志新(化名)和其女友劉穎节吮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體判耕,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡透绩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壁熄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帚豪。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖草丧,靈堂內(nèi)的尸體忽然破棺而出狸臣,到底是詐尸還是另有隱情,我是刑警寧澤方仿,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布固棚,位于F島的核電站,受9級(jí)特大地震影響仙蚜,放射性物質(zhì)發(fā)生泄漏此洲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一委粉、第九天 我趴在偏房一處隱蔽的房頂上張望呜师。 院中可真熱鬧,春花似錦贾节、人聲如沸汁汗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)知牌。三九已至,卻和暖如春斤程,著一層夾襖步出監(jiān)牢的瞬間角寸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工忿墅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扁藕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓疚脐,卻偏偏與公主長(zhǎng)得像亿柑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棍弄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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