原稿第9章應用導航模式_第1頁
原稿第9章應用導航模式_第2頁
原稿第9章應用導航模式_第3頁
原稿第9章應用導航模式_第4頁
原稿第9章應用導航模式_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第9導航和3種導航模式的綜合用法。這些知識點基本囊括了開發(fā)工作中的大部分導航需求,希望大家能有所收獲。9.1導航概述導航指戶使用應用,沒有有效的導航,用戶就會迷失方向。所適從,甚至手足無措。開發(fā)的應用是否具備這些“標牌”和“路標”呢?完美的導航能夠清晰地指戶完成任務。導航是應用軟件開發(fā)中極為重要的部分,想做好也是存在一定難度的。從內(nèi)容組織形式上考慮,應于不同的視圖控制器。有3種導航模式,每一種導航模式都對平鋪導航模式:內(nèi)容沒有層次關系,展示的內(nèi)容都放置在一個主屏幕上,采用分屏或分頁控制器進行導航,可以左右或者上下滑動屏幕查看內(nèi)容。圖9-1展示了中自帶的天氣預用,它采用分屏進行導航。第9導航和3種導航模式的綜合用法。這些知識點基本囊括了開發(fā)工作中的大部分導航需求,希望大家能有所收獲。9.1導航概述導航指戶使用應用,沒有有效的導航,用戶就會迷失方向。所適從,甚至手足無措。開發(fā)的應用是否具備這些“標牌”和“路標”呢?完美的導航能夠清晰地指戶完成任務。導航是應用軟件開發(fā)中極為重要的部分,想做好也是存在一定難度的。從內(nèi)容組織形式上考慮,應于不同的視圖控制器。有3種導航模式,每一種導航模式都對平鋪導航模式:內(nèi)容沒有層次關系,展示的內(nèi)容都放置在一個主屏幕上,采用分屏或分頁控制器進行導航,可以左右或者上下滑動屏幕查看內(nèi)容。圖9-1展示了中自帶的天氣預用,它采用分屏進行導航。導航模式:內(nèi)容被分成幾個功能模塊,每個功能模塊之間沒有什么關系。通過管理各個功能模塊,單擊可以切換功能模塊。圖9-2展示了導航模式。中自帶的時鐘應用,它采用的就是9-1平鋪導航模式導航模式樹形結(jié)構(gòu)導航模式:內(nèi)容是有層次的,從上到下細分或者具有分類包含等關系,例如黑龍江省包含了哈爾濱,哈爾濱又包含了道里區(qū)、道外區(qū)等。圖9-3展示了中自帶的郵件應用,它采用的就是樹形結(jié)構(gòu)導航模式。9-3樹形結(jié)構(gòu)導航模式這3種導航模式基本可以滿足大部分應用的導航需求。在實際應用中,有時會將幾種9.2導航的“死胡同”——模態(tài)窗口9-1平鋪導航模式導航模式樹形結(jié)構(gòu)導航模式:內(nèi)容是有層次的,從上到下細分或者具有分類包含等關系,例如黑龍江省包含了哈爾濱,哈爾濱又包含了道里區(qū)、道外區(qū)等。圖9-3展示了中自帶的郵件應用,它采用的就是樹形結(jié)構(gòu)導航模式。9-3樹形結(jié)構(gòu)導航模式這3種導航模式基本可以滿足大部分應用的導航需求。在實際應用中,有時會將幾種9.2導航的“死胡同”——模態(tài)窗口的主要任務是登錄后進入主界面,如果用戶沒有,就要先去“”是次要任務,當用戶完成后,會關閉視圖,回到登錄界面繼續(xù)進行主要任務。9-4模態(tài)視圖示意圖Back鍵返回。9-4模態(tài)視圖示意圖Back鍵返回。個專門的類,它可以是上面提到的控制器的子類。負責主要任務視圖的控制器稱為“主or類中,主要有如下兩個方法。遇到這些問題,因為在這兩個系統(tǒng)中遇到上述情況pletion:):呈現(xiàn)模態(tài)視圖。pletion:):關閉模態(tài)視圖。present(dismiss(在呈現(xiàn)模態(tài)視圖時候,有兩個選擇,一種是在程序代碼中使用UIViewController的present(InterfaceBuilderSegue實現(xiàn),這種方式不需要編寫一行代碼。界面。SaveID”回傳給登錄模態(tài)視圖案例ModalViewSample具體步驟如下:1.創(chuàng)建工程模態(tài)視圖案例ModalViewSample具體步驟如下:1.創(chuàng)建工程使用Xcode創(chuàng)建工程ModalViewSample,相關選項如下:模板采用SingleViewApplication,Devices選擇2.屏幕適配本案例中屏幕適配所有的。ClasswCompact|9-68.2節(jié)。9-6當前視圖控制器3.添加導航欄本例的視圖都是帶有導航欄的(95,添加導航欄的方式有兩種:一是從Bar后單擊Editor→Embed→NavigationController9-7所示。導航欄可以帶有標題,雙擊導航欄中間部分,然后使導航欄標題處于編輯狀態(tài),并輸入989-7當前視圖控制器嵌入到導航控制器9-89-7當前視圖控制器嵌入到導航控制器9-8編輯導航欄標題4.界面布局Layout約束,添加約束的7.3節(jié)。設計登錄界面5.添加接著來設計第二個界面( 設計登錄界面5.添加接著來設計第二個界面( 視圖控制器到設計界面,參考上面的步驟將該視圖控制器也嵌入到導航控制器中。界面導航欄的標題為“ ,然后對象庫中拖曳兩個BarutonItm到修改9-10所示。CancelSaveiOS系統(tǒng)按鈕,設置左CancelidentifierSave。添加左右導航欄按鈕6.添加兩個場景的過渡(Segue)到此為止,只是設計完成了兩個 所示。如果想單擊登錄界面中的“”按鈕后,界面跳轉(zhuǎn)到界面,則需要在登錄場景和場景之間control鍵,從“”按鈕拖曳鼠標添加左右導航欄按鈕6.添加兩個場景的過渡(Segue)到此為止,只是設計完成了兩個 所示。如果想單擊登錄界面中的“”按鈕后,界面跳轉(zhuǎn)到界面,則需要在登錄場景和場景之間control鍵,從“”按鈕拖曳鼠標到 ,如圖9-12所示。然后松開鼠標,此時會彈出如圖9-13所示的菜單,菜單,PresentModally是模態(tài)類型的過渡。兩個的視圖控制器從登錄按鈕拖曳鼠標到導航控制器9-13選擇PresentModally4個控制器都連接在一起了,從登錄按鈕拖曳鼠標到導航控制器9-13選擇PresentModally4個控制器都連接在一起了,所示。連接在一起的視圖控制器7.添加視圖控制器類InterfaceBuilder中的操作基本完成,下面就可以編寫代碼了。由于創(chuàng)加一個 視圖控制器類,具體操作步驟如下。Choosea加一個 視圖控制器類,具體操作步驟如下。Chooseatemplateforyournewfile:(9-15所示。選擇文件模板(2)Next9-16Class中輸入RegisterViewControllerAlsocreateXIBfile復選框。輸入類名(3)BuilderInterfaceClass中,選擇視圖控制器,打開其標識檢查器,重新選擇為RegisterViewController,這樣故事板中的這個視圖控制器就與代碼中的件。界面導航欄中的左右按鈕定義動作事如下:classRegisterViewController:UIViewController{中實現(xiàn)的,具體代碼@IBOutletweakvartxtUsername:輸入類名(3)BuilderInterfaceClass中,選擇視圖控制器,打開其標識檢查器,重新選擇為RegisterViewController,這樣故事板中的這個視圖控制器就與代碼中的件。界面導航欄中的左右按鈕定義動作事如下:classRegisterViewController:UIViewController{中實現(xiàn)的,具體代碼@IBOutletweakvartxtUsername:UITextField!@IBActionfuncsave(_sender:AnyObject){①self.dismiss(animated:true){()->Voidin單擊Save按鈕,關閉模態(tài)視圖")②vardataDict=[String:String]()dataDict["username"]=self.txtUsername.text③NotificationCenter.default.post(name:Notification.Name(rawValue:"object:nil,userInfo:dataDict)pletionNotification"),④}}@IBActionfunccancel(_sender:AnyObject){self.dismiss(animated:true,completion:{print("單擊Cancel按鈕,關閉模態(tài)視圖")})}⑤⑥}SaveCancel按鈕觸發(fā)的可以關閉模態(tài)視圖。提示代碼第②行采用的是Swift語言尾隨閉包表示形式,尾隨閉包是將dismiss(面。若讀者想深入了解尾隨閉包,可以參考2.14.6節(jié)。第⑥行代碼則沒有采用尾隨閉completion參數(shù)值是一個閉包。ViewController中添加代碼如下:classViewController:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()NotificationCenter.default.addObserver(self,selector:#selector(pletion(_:)),name:ViewController中添加代碼如下:classViewController:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()NotificationCenter.default.addObserver(self,selector:#selector(pletion(_:)),name:Notification.Name(rawValue:"object:nil)pletionNotification"),}overridefuncdidReceiveMemoryWarning(){super.didReceiveMemoryWarning()}funcpletion(_notification:Notification){lettheData=notification.userInfoas![String:String]letusername=theData["username"]!print("username=\(username)")}}首先需要在viewDidLoad中通知,是回調(diào)方法。9.3平鋪導航而哈爾濱市與黑龍江省之間就是從屬的層次關系。9.3.1 平鋪導航概述9-16所示是自帶的天氣應用程序,每一個屏幕展示一個城市最近的天氣信息。它是基于分屏導航實現(xiàn)的平鋪導航模式?;诜制翆Ш綄崿F(xiàn)的平鋪導航模式可以構(gòu)建iOS中的實用型應用程序。平鋪導航的天氣應用提示平鋪導航的天氣應用提示iBooks應用(橫屏雙頁顯示)導航在iPad和所示是iBooks應用(豎屏單頁顯示)為了進一步掌握平鋪導航,先從一個需求開始介紹平鋪導航。朋友是一名畫家,他果想開發(fā)一個基于39-19所示,3iBooks應用(豎屏單頁顯示)為了進一步掌握平鋪導航,先從一個需求開始介紹平鋪導航。朋友是一名畫家,他果想開發(fā)一個基于39-19所示,3幅圣母像之間沒有層次關系而是扁平關系。3幅世界名畫9.3.2 使用目錄管理圖片ViewApplication模板創(chuàng)建的工程。iOS設備的屏幕大小不同,iOS設備在運行時候可以使用 目錄(Assetcatalog)管理圖片。選擇不同規(guī)格的圖片呢?開發(fā)圖片。使用Xcode創(chuàng)建一個工程,會發(fā)現(xiàn)工程中發(fā)現(xiàn)一個Assets.xcassets目錄,打開iOS設備的屏幕大小不同,iOS設備在運行時候可以使用 目錄(Assetcatalog)管理圖片。選擇不同規(guī)格的圖片呢?開發(fā)圖片。使用Xcode創(chuàng)建一個工程,會發(fā)現(xiàn)工程中發(fā)現(xiàn)一個Assets.xcassets目錄,打開AppIcon是為添加應用圖標的。Xcode目錄本節(jié)介紹如何使用 目錄(Assetcatalog)管理一般情況下使用的圖片。 目錄設備的屏幕適配,目前主要有:4英寸、4.7英寸和5.5英寸,4Retina顯示屏,5.5RetinaHD需準備兩套不同規(guī)格的圖片即可。在右邊的空白區(qū)域,單擊+9-21所示的菜單,9-22所示。顯示屏,那么美術設計師只添加圖片集添加圖片集添加圖片集添加圖片集3xRetinaHDRetina顯示屏所需圖片,1x是普2x3x情況。為圖片集添加圖片為圖片集添加圖片2.jpg3.jpgImage2和Image3圖片集中。9.3.3 屏幕滾動視圖重要的屬性由于分屏導航實現(xiàn)的平鋪導航主要使用的視圖是分屏控件(PageControl)和屏幕滾動視圖(lliew紹一下屏幕滾動視圖中重要的屬性。contentOffset,這些屬性最好通過代碼編程設置。1.contentSize屬性widthheight9-25中虛線區(qū)域部9-25深灰色部分。正是因為內(nèi)容視圖超出了屏幕滾動視圖大小,才會有滾動屏幕的必要。屬性2.contentInset屬性2.contentInset屬性9-26所示的深灰色部分。這往往是為了留出空白以放置工具欄、欄或?qū)Ш綑诘?。contentInset屬性contentInset屬性Right,分別代表頂邊距離、底邊距離、左邊距離和右邊距離。3.contentOffset屬性contentOffset屬性是內(nèi)容視圖坐標原點與屏幕滾動視圖坐標原點的偏移量,返回xy9-27所示,內(nèi)容視圖x軸正偏移,y軸方向沒有偏移。x110點的代碼如下:self.scrollView.setContentOffset(CGPoint(x:110,y:0),animated:true)或者self.scrollView.contentOffset=CGPoint(x:110,y:0)x軸偏移量定,在偏移的同時可以出現(xiàn)動畫效果。110,y:0),animated:true)方法設9.3.4 分屏導航實現(xiàn)分屏導航實現(xiàn)的平鋪導航主要使用的視圖是分屏控件(PageControl)和屏幕滾動視圖(llieS9.3.4 分屏導航實現(xiàn)分屏導航實現(xiàn)的平鋪導航主要使用的視圖是分屏控件(PageControl)和屏幕滾動視圖(llieS(上邊(下邊2020個小鋪導航模式已經(jīng)不是很方便了。Xib1.初始化屏幕滾動視圖①classViewController:UIViewController,UIScrollViewDelegate{varscrollView:UIScrollView!varpageControl:UIPageControl!varviewHeight:CGFloat=0.0varviewWidth:CGFloat=0.0overridefuncviewDidLoad(){super.viewDidLoad()viewHeight=self.view.frame.size.heightviewWidth=self.view.frame.size.width//創(chuàng)建屏幕滾動視圖self.scrollView=UIScrollView(frame:self.view.frame)self.scrollView.contentSize=CGSize(width:self.view.frame.size.width*3,self.scrollView.frame.size.height)self.scrollView.isPagingEnabled=trueself.scrollView.delegate=selfletimage1=UIImage(named:"Image1")②③④⑤⑥⑦varimageView1=UIImageView(image:image1)imageView1.frame=CGRect(x:0.0,y:0.0,width:viewWidth,height:viewHeight)⑧⑨self.scrollView.addSubview(imageView1)letimage2=UIImage(named:"Image2")varimageView2=UIImageView(image:image2)imageView2.frame=CGRect(x:viewWidth,y:0.0,width:viewWidth,height:viewHeight)self.scrollView.addSubview(imageView2)letimage3=UIImage(named:"Image3")varimageView3=UIImageView(image:image3)imageView3.frame=CGRect(x:viewWidth*2,y:0.0,width:viewWidth,height:viewHeight)self.scrollView.addSubview(imageView3)⑩self.view.addSubview(self.scrollView)<省略初始化分屏控件>}}ViewController類,要求實現(xiàn)屏幕滾動視圖委托協(xié)議上述代碼第①行是UIScrollViewDelegate。代碼第②行是創(chuàng)建屏幕滾動視圖對象,本例采用具體frame參數(shù)的構(gòu)造器,self.view.frame表示屏幕滾動視圖大?。╢rame屬性)與當前視圖窗口大小一樣。另外,屏幕滾動視圖還要有個重要的屬性內(nèi)容視圖大?。╟ontntze,內(nèi)容視圖包含了屏幕滾動視圖內(nèi)所容納的全部視圖,代碼第③行是設置內(nèi)容視圖大小。代碼第④行是設置屏幕滾動視圖是否開啟翻頁功能,這個功能開啟后,每次滾動每次滑動的時候翻一屏。第⑤}ViewController類,要求實現(xiàn)屏幕滾動視圖委托協(xié)議上述代碼第①行是UIScrollViewDelegate。代碼第②行是創(chuàng)建屏幕滾動視圖對象,本例采用具體frame參數(shù)的構(gòu)造器,self.view.frame表示屏幕滾動視圖大?。╢rame屬性)與當前視圖窗口大小一樣。另外,屏幕滾動視圖還要有個重要的屬性內(nèi)容視圖大?。╟ontntze,內(nèi)容視圖包含了屏幕滾動視圖內(nèi)所容納的全部視圖,代碼第③行是設置內(nèi)容視圖大小。代碼第④行是設置屏幕滾動視圖是否開啟翻頁功能,這個功能開啟后,每次滾動每次滑動的時候翻一屏。第⑤self為屏幕滾動視圖的委托對象。UIImage圖片對象,然后通過第⑦行代碼第⑥行通過imageView2和imageView3的位置區(qū)別。方法將圖片視圖添加到屏幕滾動視圖中,還有屏幕滾動視圖也需要通過第⑩行代碼添加到當前視圖中。2.初始化分屏控件viewDidLoad方法完成的。代碼如下://創(chuàng)建PageControlvarpageControlHeight:CGFloat=38.0varpageControlWidth:CGFloat=120.0letpageControlFrame=CGRect(x:(viewWidthControlWidth)/2,y:(viewHeightControlHeight),width:pageControlWidth,height:pageControlHeight)self.pageControl=UIPageControl(frame:pageControlFrame)self.pageControl.backgroundColor=UIColor.blackself.pageControl.alpha=0.5self.pageControl.numberOfPages=3self.pageControl.currentPage=0self.pageControl.addTarget(self,action:#selector(changePage(_:)),for:UIControlEvents.valueChanged)self.view.addSubview(self.pageControl)①②③④⑤⑥⑦⑧frameCGSize數(shù)據(jù),從其中的數(shù)據(jù)可見frame是從代碼第pageControlFrame①行的景顏色會遮擋圖片,可以設置alpha,代碼第④行是設置0.5。代碼第⑤行設置總屏數(shù)為3,代碼第⑥行是設置當前屏為0。代碼第⑦行是設置分屏控件的動作changePage:關聯(lián)起來。代碼第⑧行是將分屏控件添加到當前視圖中。3.實現(xiàn)屏幕滾動視圖委托協(xié)議屏的小亮點沒有跟著一起變化。這需要實現(xiàn)屏幕滾動視圖委托協(xié)議,代碼如下://實現(xiàn)UIScrollViewDelegate協(xié)議funcscrollViewDidScroll(_scrollView:UIScrollView){varoffset=scrollView.contentOffsetself.pageControl.currentPage=Int(offset.x)/Int(viewWidth)}①②其中代碼第①②行設置分屏控//實現(xiàn)UIScrollViewDelegate協(xié)議funcscrollViewDidScroll(_scrollView:UIScrollView){varoffset=scrollView.contentOffsetself.pageControl.currentPage=Int(offset.x)/Int(viewWidth)}①②其中代碼第①②行設置分屏控Int(offset.x)/Int(viewWidth)公式計算的,即偏移量除以視圖的寬度,然后取整。4.分屏控件當單擊分屏控件的兩端時會觸發(fā)它的默認 (alueChaged,然后會調(diào)用與該的changePage:方法,其代碼如下://響應PageControl默認處理funcchangePage(_sender:AnyObject){UIView.animateWithDuration(0.3,animations:{varwhichPage=self.pageControl.currentPageself.scrollView.contentOffset=CGPoint(x:self.viewWidth*CGFloat(whichPage),y:0)})}偏移量,而且為了使屏幕變化產(chǎn)生動畫效果,使用了UIView.animateWithDuration(0.3,animations代碼,重新調(diào)整了控件的偏移量。9.4導航欄位方便, 欄中的標簽不能超過5個,如果超過5個,則最后一個顯示為“9-28所示?!睍霈F(xiàn)“”9.4.1導航實例慮的是按照行政區(qū)劃。第一組:哈爾濱、齊齊哈爾、雞西、鶴崗、雙鴨山、大慶、伊春、佳木斯、七臺河、牡丹江、黑河、綏化,這12個城市歸黑龍江省管轄。第二組:長春、吉林、四平、遼源、通化、白山、松原、白城,這8個城市歸吉林省管轄。第三組:沈陽、大連、鞍山、撫順、本溪、丹東、錦州、營口、阜新、遼陽、盤錦、鐵嶺、朝陽、葫蘆島,這14個城市歸遼寧省管轄?!啊?.4.1導航實例慮的是按照行政區(qū)劃。第一組:哈爾濱、齊齊哈爾、雞西、鶴崗、雙鴨山、大慶、伊春、佳木斯、七臺河、牡丹江、黑河、綏化,這12個城市歸黑龍江省管轄。第二組:長春、吉林、四平、遼源、通化、白山、松原、白城,這8個城市歸吉林省管轄。第三組:沈陽、大連、鞍山、撫順、本溪、丹東、錦州、營口、阜新、遼陽、盤錦、鐵嶺、朝陽、葫蘆島,這14個城市歸遼寧省管轄。立,這就是導航模式適用的情況。按照這樣的分組方式在所示, 名就是省的名字,當選中某個省的時,屏幕會顯示出該省的城市信息,而且是高亮顯示的。導航模式在開發(fā)具體應用的時候, 導航模式的各個塊之間相對。9.4.2導航實現(xiàn)工程模板,可以創(chuàng)建導航模式的應用,模板采用故事板技術來實現(xiàn)何代碼。導航模式。故事板技術實現(xiàn)導航很簡單,不需要編寫任1.創(chuàng)建Tabbed導航模式在開發(fā)具體應用的時候, 導航模式的各個塊之間相對。9.4.2導航實現(xiàn)工程模板,可以創(chuàng)建導航模式的應用,模板采用故事板技術來實現(xiàn)何代碼。導航模式。故事板技術實現(xiàn)導航很簡單,不需要編寫任1.創(chuàng)建TabbedApplication工程9-30所示。TabNavigationTabNavigation工程2.添加場景Segue。故事Segue,用來SecondScene之間的關系。有的場景很簡單,直接修改視圖控制器名就可以了,然后場景就會跟著變化。添加一個9-31所示。添加一個場景到設計界面Scenecontrol添加一個場景到設計界面Scenecontrol9-32所示viewcontrollers項,此時連線就做好了。連線兩個場景在代碼部分只需要3LiaoViewController個視圖控制器HeiViewControllerJiViewController和前只有兩個視圖控制器FirstViewController 和SecondViewController,可以把這兩個改名,然后再添加一個。改名布局麻煩,推薦刪除3個視圖控制器。File→New→File…iOS→Cocoa創(chuàng)建過程是在菜單欄中選擇,在文件模板中選擇TouchClass,此時將彈出“新建文件”SecondViewController,可以把這兩個改名,然后再添加一個。改名布局麻煩,推薦刪除3個視圖控制器。File→New→File…iOS→Cocoa創(chuàng)建過程是在菜單欄中選擇,在文件模板中選擇TouchClass,此時將彈出“新建文件”AlsecreateXIBfile復選框。再體步驟不再贅述。SecondScene9-33ViewController下Title中輸入想要的名稱。修改場景的名稱3.修改欄項目中的圖標和文本tabicons文件夾欄項目中的圖標和文本,HeiScene→Hei→First9-34BarItem下的tlemagehepng。按照同HeiScene設置其他兩個場景。修改欄項目中圖標和文本不同的iOS設備圖標的規(guī)格不同,他們添加到工程中可以通過目錄方式(見提示Plus修改欄項目中圖標和文本不同的iOS設備圖標的規(guī)格不同,他們添加到工程中可以通過目錄方式(見提示Plus)準備的圖標,@3x后綴的是為RetinaHD顯示屏準備的圖標。圖標規(guī)格與命名規(guī)范名字,然后再修改視圖背景顏色,具體過程不再贅述。此時就實現(xiàn)標了簽導航模式的一個實例,整個過程中沒有編寫一行代碼。9.5樹形結(jié)構(gòu)導航樹形結(jié)構(gòu)導航模式也是非常重要的導航模式,它將導航視圖控制器iOS圖標規(guī)格與命名規(guī)范名字,然后再修改視圖背景顏色,具體過程不再贅述。此時就實現(xiàn)標了簽導航模式的一個實例,整個過程中沒有編寫一行代碼。9.5樹形結(jié)構(gòu)導航樹形結(jié)構(gòu)導航模式也是非常重要的導航模式,它將導航視圖控制器iOS效率型應用程序。提示效率型應用程序具有組織和操作具體信息的功能,通常用于完成比較重要的任務。效HumanInterfaceGuidelines,iOS人機界面設計指導手冊)9.5.1 樹形結(jié)構(gòu)導航實例同樣是按照行政區(qū)劃來展示東北三省的城市信息。第一組:哈爾濱、齊齊哈爾、雞西、鶴崗、雙鴨山、大慶、伊春、佳木斯、七臺河、牡丹江、黑河、綏化,12個城市為黑龍江省管轄;第二組:長春、吉林、四平、遼源、通化、白山、松原、白城,8個城市為吉林省管轄;第三組:沈陽、大連、鞍山、撫順、本溪、丹東、錦州、營口、阜新、遼陽、盤錦、鐵嶺、朝陽、葫蘆島,14個城市為遼寧省管轄。百科上的信息網(wǎng)就構(gòu)成了一種從http春→9-36所示。樹形導航模式9-37所示,它采用的就是樹形結(jié)構(gòu)的導航模式,所有界1樹形導航模式9-37所示,它采用的就是樹形結(jié)構(gòu)的導航模式,所有界123體展示的功能。自帶的郵件應用制器自己添加的,它是漢澤爾與格萊特散在路上的“面包屑”1,開發(fā)沒利自己定義這個按鈕,否則用戶就會迷失在應用之中。樹形結(jié)構(gòu)導航模式的缺點是怎樣進來,就要怎樣原路返回,這一點與導航模式不同,后者可以很快在各個模塊之間切換。9.5.2 樹形結(jié)構(gòu)導航實現(xiàn)Application工程模板創(chuàng)建樹形結(jié)構(gòu)導航的應用,但是這方式無法了解的細節(jié)問題,因此本書采用Single制器自己添加的,它是漢澤爾與格萊特散在路上的“面包屑”1,開發(fā)沒利自己定義這個按鈕,否則用戶就會迷失在應用之中。樹形結(jié)構(gòu)導航模式的缺點是怎樣進來,就要怎樣原路返回,這一點與導航模式不同,后者可以很快在各個模塊之間切換。9.5.2 樹形結(jié)構(gòu)導航實現(xiàn)Application工程模板創(chuàng)建樹形結(jié)構(gòu)導航的應用,但是這方式無法了解的細節(jié)問題,因此本書采用SingleViewApplication工程模板實現(xiàn)。SingleViewApplication模板并利用故事板技術創(chuàng)建一個名為TreeNavigation的工程。1.ViewController視圖控制器更換為導航控制器由于使用的視圖控制器是導航控制器(igationControllr,需要打開故事板刪除示。框。1引自于格林兄弟所收錄的德國童話《糖果屋》(德語:H?nselundGretel),又譯《漢澤爾與格萊特》。添加導航控制器添加導航控制器9-39設置集合視圖控制為初始視圖控制器2.設置導航控制器的根視圖控制器9-409-39設置集合視圖控制為初始視圖控制器2.設置導航控制器的根視圖控制器9-40就是根視圖控制器,它本身是一個表格控制器,對應的程序代碼還沒有,可以把作為根視圖控制器,所有需要修改classViewController:UITableViewController{……}器按鈕,選擇CustomClass→Class下拉列表中的ViewController類。Cell,Indicator9-41所示。導航控制器和根視圖控制器設置單元格屬性導航控制器和根視圖控制器設置單元格屬性3.創(chuàng)建二級視圖先新建一個二級視圖控制器CitiesViewController框,在Class項目中輸入CitiesViewController,從Subclassof下拉列表中選擇復選框。創(chuàng)建完成二級視圖控制器CitiesViewController,回到設計界面從對象庫中拖曳一個加的TableViewController。9-43所示的SegueSelection兩個視圖控制器的連線選擇框選中連線中間的Segue選擇框選中連線中間的Segue,打開其屬性檢查器,然后在Identifier屬性中輸入ShowSelectedProvince9-44Identifier屬性將在代碼中用于對象。Segue9-44Segue的9-44Segue的Identifier屬性CitiesViewController。CitiesViewControllerScene中的TableViewCell,IdentifierCellIdentifierAccessoryDetail9-45所示。設置單元格屬性4.創(chuàng)建三級視圖新建三級視圖控制器DetailViewController,具體操作方法是:選擇菜單設置單元格屬性4.創(chuàng)建三級視圖新建三級視圖控制器DetailViewController,具體操作方法是:選擇菜單框,在Class項目中輸入DetailViewController,從Subclassof下拉列表中選擇XIBfile復選框。ControllerInterfaceBuilder設CitiesViewControllerShow。eIenifieroecteCiy。ViewController,打開其標識檢查器,單擊CustomClass→Class,將其設置為選擇輸出口。到此,煩瑣的設計工作就完成了,下面看一下代碼部分。根視圖控制器的相關代碼如下:classViewController:UITableViewController{provinces_cities.plist取出數(shù)據(jù),字典結(jié)構(gòu)vardictData:[StringAny]!dictData的所有鍵集合,數(shù)組結(jié)構(gòu)varlistData:[String]!overridefuncviewDidLoad(){super.viewDidLoad()letplistPath=Bundle.main.path(forResource:"provinces_cities",ofType:"plist")letdict=NSDictionary(contentsOfFile:plistPath!)>}UIViewController中的方法。Segue就會觸發(fā)該方法。>}UIViewController中的方法。Segue就會觸發(fā)該方法。segue.destination屬性用于獲得要跳轉(zhuǎn)到的視圖控制器對象。>classCitiesViewController:UITableViewController{varlistData:[[StringString]]!overridefuncviewDidLoad(){super.viewDidLoad()}MARK:-實現(xiàn)表視圖數(shù)據(jù)源方法overridefunctableView(_tableView:UITableView,numberOfRowsInSectionsection:Int)->Int{returnself.listData.count}overridefunctableView(_tableView:UITableView,cellForRowAtindexPath:IndexPath)-UITableViewCell{self.dictData=di ![String:Any]self.listData=dict?.allKeysas![String]self.title省份信息"}//UITableViewDataSource協(xié)議方法overridefunctableView(_tableView:UITableView,numberOfRowsInSectionsection:Int)->Int{returnself.listData.count}//實現(xiàn)表視圖數(shù)據(jù)源方法overridefunctableView(_tableView:UITableView,cellForRowAtindexPath:IndexPath)-UITableViewCell{letcellIdentifier="CellIdentifier"letcell:UITableViewCell!=tableView.dequeueReusableCell(withIdentifier:cellIdentifier,for:indexPath)letrow=indexPath.rowcell.textLabel?.text=self.listData[row]returncell}//選擇表視圖行時觸發(fā)overridefuncprepare(forsegue:UIStoryboardSegue,sender:Any?){ ①if(segue.identifier=="ShowSelectedProvince"){letcitiesViewController=segue.destinationas!CitiesViewControllerletindexPath=self.tableView.indexPathForSelectedRowasIndexPath?letselectedIndex=indexPath!.rowletselectN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論