利用導(dǎo)航可以創(chuàng)建多視圖應(yīng)用程序,具體來說有兩種導(dǎo)航形式,pushing/poping和presenting/dismissing。在討論推pushing/poping view ocntrollers之前,我們需要確保理解另一個(gè)概念撑刺,UINavigationController。根據(jù)蘋果公司的文檔碰纬,“導(dǎo)航控制器(navigation controller)是一個(gè)容器視圖控制器(container view controller)呐萌,它管理導(dǎo)航界面中的一個(gè)或多個(gè)子視圖控制器渗磅。在這種類型的界面中犯眠,一次只能看到一個(gè)子視圖控制器”按灶。換句話說,一個(gè)UINavigationController可以被認(rèn)為是一個(gè)管理多個(gè)視圖控制器的堆棧筐咧。并且鸯旁,一次只有一個(gè)出現(xiàn)在屏幕上。
// Pushing
self.navigationController?.pushViewController(viewController: UIViewController, animated: Bool)
// Popping
self.navigationController?.popViewController(animated: Bool)
效果類似下圖:
接下來討論P(yáng)resenting/Dismissing View Controllers,與pushing/poping不同,為了present/dismiss(呈現(xiàn)/消除)view controller,我們不需要一個(gè)UINavigationController,因此不需要堆棧量蕊。
// Presenting
self.present(viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?)
// Dismissing
self.dismiss(animated: Bool, completion: (() -> Void)?)
MVC,Model铺罢、View、Controller
Delegation用于允許子對(duì)象與其父對(duì)象通信残炮,而不必知道其父對(duì)象的確切類型韭赘。在iOS編程中,當(dāng)我們希望child view controller與其parent view controller通信時(shí)吉殃,或者當(dāng)我們希望tableview cell與parent tableview通信以響應(yīng)某些事件時(shí)辞居,這是非常有用的。換句話說蛋勺,delegation只是一個(gè)class把任務(wù)交給另一個(gè)class的一種方式。
在swift中使用protocols實(shí)現(xiàn)delegation鸠删。protocol定義了適合特定任務(wù)或功能的方法抱完、屬性和其他需求的藍(lán)圖。然后刃泡,類巧娱、結(jié)構(gòu)或枚舉可以采用該協(xié)議來提供這些需求的實(shí)際實(shí)現(xiàn)碉怔。任何滿足protocol要求的類型都被稱為符合該protocol。換句話說禁添,您可以認(rèn)為協(xié)議類似于Java中的接口撮胧。它只是任何符合它的類需要實(shí)現(xiàn)的一組方法和/或?qū)傩?/p>