iOS-UIViewController 視圖控制器 傳值

解釋:

UIViewController 視圖控制器 铺根,是其他控制器的父類,可以添加子控制器嵌套使用乔宿。
屬于MVC設(shè)計模式中得C位迂,獲取M數(shù)據(jù),把數(shù)據(jù)傳到V上面。
管理內(nèi)部(整個屏幕)各個view的加載顯示和卸載掂林,同時負(fù)責(zé)與其他ViewController的通信和協(xié)調(diào)臣缀。

分類:

一類主要用于展示內(nèi)容:
比如UIViewController、UITableViewController等泻帮,同時還可以自定義繼承自UIViewController的ViewController精置;
另一類是ViewController容器:
UINavigationController和UITabBarController等,UINavigationController是以Stack的形式來存儲和管理ViewController的锣杂,UITabBarController是以Array的形式來管理ViewController的脂倦。
不管是哪類ViewController,都繼承自UIViewController

創(chuàng)建方式:

1 代碼
2 xib
3 stroyBoard

關(guān)聯(lián):

通常通過 UINavigationController配合來切換頁面。

設(shè)置根控制器:

//在 AppDelegate.m 中寫入:
ViewController1* vc = [[ViewController1 alloc] init];
    //導(dǎo)航控制器
    UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:vc];
    self.window.rootViewController = nc; //根控制器
    
//程序自動顯示ViewController1文件顯示的內(nèi)容元莫。

控制器跳轉(zhuǎn)/切換赖阻、返回:

//在  ViewController1 的事件中寫入:
    ViewController2* vc2 = [[ViewController2 alloc] init];
    [self.navigationController pushViewController:vc2 animated:YES];//(入棧)
//事件執(zhí)行時 自動轉(zhuǎn)到ViewController2文件中。

//返回上一級controller
popViewControllerAnimated: // (出棧)
//返回根controller
popToRootViewControllerAnimated:

兩個頁面?zhèn)髦担?/p>

//1 可以利用NSUserDefaults踱蠢。
//2 實例化一個頁面直接給他的屬性賦值:
ViewController2* vc2 = [[ViewController2 alloc] init];
    vc2.vc1 = self;//這個要在2中聲明1是一個類 @class ViewController1; 設(shè)置成員變量火欧,就可以在2中賦值1
    vc2.view.backgroundColor = [UIColor purpleColor];
    vc2.str = @"MC";

生命周期、加載過程:

load->initialize->init(initWithNibName)—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
其中viewWillUnload跟viewDidUnLoad 在iOS6以后就過期了.
LoadView: 控制器調(diào)用loadView方法創(chuàng)建控制器的view.當(dāng)控制器的view存在了就不會調(diào)用.
不要再LoadView中調(diào)用[super loadView],會影響CPU性能
dealloc: 視圖被銷毀茎截,此處需要對你在init和viewDidLoad中創(chuàng)建的對象進行釋放
在這個方法內(nèi),我們通常會把添加在控制器內(nèi)的一些東西給移出.例如:KVO監(jiān)聽者,HUD,定時器等

//視圖已經(jīng)加載 做一些控件的初始化操作,比如給控件設(shè)置尺寸位置苇侵,只在加載的時候調(diào)用一次
- (void)viewDidLoad

//視圖將要出現(xiàn)的時候
- (void)viewWillAppear:(BOOL)animated

//視圖已經(jīng)出現(xiàn)的時候會調(diào)用
- (void)viewDidAppear:(BOOL)animated

//視圖將要消失的時候調(diào)用
- (void)viewWillDisappear:(BOOL)animated

//視圖已經(jīng)消失的時候調(diào)用
- (void)viewDidDisappear:(BOOL)animated

//控件改變位置時調(diào)用,多用于橫豎屏切換企锌。UIScrollView滾動也會觸發(fā)
- (void)viewWillLayoutSubviews
- (void)viewDidLayoutSubviews

//在內(nèi)存不夠的情況下調(diào)用 收到low-memory時系統(tǒng)不會釋放view榆浓,而只是釋放controller的resource。
-(void)didReceiveMemoryWarning 

設(shè)置title:

UIViewController *vc;
vc.title = title;  // 相當(dāng)于同時設(shè)置了tabBarItem.title和navigationItem.title
vc.tabBarItem.title = title;  // tabBar標(biāo)簽上顯示的文字
vc.navigationItem.title = title;  // 導(dǎo)航欄上顯示的文字
vc.hidesBottomBarWhenPushed = YES;  
// 當(dāng)該控件器被push顯示出來的時候撕攒,自動隱藏底部tabBar哀军;

跳轉(zhuǎn)頁面卡頓解決:

//把當(dāng)前控制器背景顏色設(shè)為目標(biāo)控制器顏色。

vc.view.backgroundColor = [UIColor redColor];

注意事項1:

//不應(yīng)該這樣用4蛉础!
viewController.view.bounds = CGRectMake(50, 50, 100, 200);
[viewController.view addSubview:someOtherViewController.view];

Each custom view controller object you create is responsible for managing all of the views in a single view hierarchy. In iPhone applications, the views in a view hierarchy traditionally cover the entire screen, but in iPad applications they may cover only a portion of the screen. The one-to-one correspondence between a view controller and the views in its view hierarchy is the key design consideration. You should not use multiple custom view controllers to manage different portions of the same view hierarchy. Similarly, you should not use a single custom view controller object to manage multiple screens worth of content.
一個ViewController應(yīng)該且只應(yīng)該管理一個view hierarchy谎倔,而通常來說一個完整的view hierarchy指的是整整占滿的一個屏幕柳击。而很多app滿屏中會有各個區(qū)域分管不同的功能,一些開發(fā)者喜歡直接新建一個ViewController和一套相應(yīng)的View來完成所要的功能(比如我自己=_=)片习。雖然十分方便捌肴,但是卻面臨很多風(fēng)險..

最后附圖:

view的加載過程:

view的加載過程.png

內(nèi)存警告系統(tǒng)執(zhí)行步驟:

內(nèi)存警告系統(tǒng)執(zhí)行步驟.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市藕咏,隨后出現(xiàn)的幾起案子状知,更是在濱河造成了極大的恐慌,老刑警劉巖孽查,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饥悴,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機西设,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門瓣铣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贷揽,你說我怎么就攤上這事棠笑。” “怎么了禽绪?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵蓖救,是天一觀的道長。 經(jīng)常有香客問我印屁,道長循捺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任库车,我火速辦了婚禮巨柒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柠衍。我一直安慰自己洋满,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布珍坊。 她就那樣靜靜地躺著牺勾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阵漏。 梳的紋絲不亂的頭發(fā)上驻民,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音履怯,去河邊找鬼回还。 笑死,一個胖子當(dāng)著我的面吹牛叹洲,可吹牛的內(nèi)容都是我干的柠硕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼运提,長吁一口氣:“原來是場噩夢啊……” “哼蝗柔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起民泵,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤癣丧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后栈妆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胁编,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡厢钧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掏呼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坏快。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖憎夷,靈堂內(nèi)的尸體忽然破棺而出莽鸿,到底是詐尸還是另有隱情,我是刑警寧澤拾给,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布祥得,位于F島的核電站,受9級特大地震影響蒋得,放射性物質(zhì)發(fā)生泄漏级及。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一额衙、第九天 我趴在偏房一處隱蔽的房頂上張望饮焦。 院中可真熱鬧,春花似錦窍侧、人聲如沸县踢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硼啤。三九已至,卻和暖如春斧账,著一層夾襖步出監(jiān)牢的瞬間谴返,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工咧织, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嗓袱,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓习绢,卻偏偏與公主長得像索抓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毯炮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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