由於iOS 5的故事板已經出現,從那時起已經收到大量的升級和新功能,其中包括退卷塞格斯反向導航,為iPhone和iPad,以及設計代碼意見現場呈現普遍的故事板。
Xcode的7帶來了新的功能,讓您做以下故事板:
在這個的iOS 9故事板教程中,您將學習如何使用故事情節的參考和補充意見。你會被更新,旨在幫助您與所有那些可列表時刻在生活中,無論是買菜,打包行李休假的應用程序,或生存清單為即將到來的僵屍啟示!:]
為了充分利用本教程,你應該有一些基本的故事情節和表視圖知識。需要一個快速刷了?看看我們的故事板教程iOS中9。
下載啟動項目本教程,並在模擬器中運行它; 點擊顯示的清單中的一個來查看其中包含的項目,然後點擊任意條目可查看其關閉。完成和完成了!
快速浏覽一下的代碼,讓您的軸承。
ChecklistsViewController.swift顯示清單的初步名單,並ChecklistDetailViewController.swift每個列表中顯示的項目。Main.storyboard包含用戶界面項目。
你在這個教程任務是提高坦然,這樣的故事情節更加有組織的; 您還可以查看筆記列表項,並添加日記,記錄你的僵屍生存努力。
有情節板中兩個未使用的場景。當你完成本教程中,你可能想將這些場景到坦然,讓您可以添加項目和注釋的清單。
如果你曾經使用過的故事板的大項目或作為一個團隊,與其他開發人員的一部分,你就會知道,他們很快就會變得不實用。合並沖突,意大利面條一樣SEGUE箭頭和導航用自己的方式繞牆的場景足以讓任何人質疑故事板是否值得。
雖然你一直都能夠使用多個故事板在您的應用程序,你從來沒有能夠使用Interface Builder它們之間Segue公司。要從不同的故事情節呈現視圖控制器,你必須首先實例,並在代碼中出示。但不再!
在Xcode 7,您可以使用權在Interface Builder中添加情節串連圖板之間的引用故事情節的參考,這既可以指向特定視圖控制器或在另一個故事板的初始視圖控制器。這使得它更容易故事板劃分成更小的故事板,並減輕了許多,而無需添加任何額外的代碼上面提到的問題。
多個小故事板也有可能使其他團隊成員能夠獨立對自己的故事板工作不踩著對方的腳趾。
理論已經足夠了 - 時間將其付諸實踐!
注:故事板引用實際上是向後兼容到iOS 8。然而,在iOS的8,你不能用一個故事情節參考了關系SEGUE,或者用它來 指向外部捆綁故事板。在當前狀態下,坦然地正處於發展的早期階段,一個小的應用程序,但有足夠的結構有辨別哪裡瓜分了主要的故事情節。容器視圖控制器來考慮拆分出的功能成為新的故事板的好去處。
消毒鋪使用標簽欄控制器,以及在這種情況下是有意義的每個選項卡的子分離成自己的故事板。
打開Main.storyboard和縮放,所以你可以看到所有六個場景。按住命令,然後按+放大和-可縮小,或右鍵單擊,在故事情節上的空白區域,然後選擇您的縮放級別。
單擊並拖動以突出,除了在左側的標簽欄控制器的故事板的所有場景:
選擇編輯\ 重構到故事板並進入Checklists.storyboard作為新故事板的名稱。將集團以檢查表,然後點擊保存。
仿佛被施了魔法,Xcode中執行以下操作:
您可能要縮小和重新定位,新的故事情節,看它的所有場景。場景及其塞格斯的排列是完全一樣是在原來的故事板。這裡是新的故事板應該是什麼樣子:
但是,發生了什麼事到原來的故事情節?打開Main.storyboard看一看:
在標簽欄控制器的“視圖控制器”SEGUE現在指向在導航控制器故事板參考Checklists.storyboard。在故事板參考使用與導航控制器的故事板的ID,以確定要原因請看在新故事板哪個場景。
有幾個“懸空”的故事板引用來查看控制器,有故事情節的ID設置; 你不需要這些的任何更長的時間。刪除它們。
相反,引用特定視圖控制器,故事情節引用可以簡單地指初始場景的故事板。
不過在Main.storyboard,選擇命名的新故事情節的參考 ChecklistsNavigationController並使用屬性檢查器來去除引用的ID,如下所示:
參考現在指向在初始視圖控制器Checklists.storyboard,和更新如圖所示:
打開Checklists.storyboard並選擇清單導航控制器的場景。使用屬性檢查器檢查是初步視圖控制器 ; 這表明這一幕應該是切入點的故事情節。
注意:一個故事板的初始視圖控制器具有從左側的箭頭指向它。構建並運行項目; 該應用程序執行,就像它,當你開始做了。唯一的區別是,事情也多了幾分有組織的幕後!
故事板的分布式開發一直是一個挑戰; 事實上,不少開發商仍然回避故事板出於恐懼可怕的合並沖突。但故事情節引用可以幫助你避免團隊故事板發展的並發症。
考慮以下情形:您正在編寫坦然地與老鄉啟示幸存者,他們的任務是創造來處理日記的功能。她的建成它使用一個單獨的故事板,而現在你需要將它添加到你自己的故事板層次......之前的僵屍降臨你的小飛地。
在項目浏覽器中,選擇頂層坦然組,正好位於該項目本身下方。點擊文件\ 文件添加到“坦然”。導航到坦然的文件夾,並選擇日記文件夾。確保復制項目,如果需要在對話框中被選中,並且添加的文件夾設置為創建組。確保添加到目標被選中的坦然。單擊添加以添加文件夾及其內容到項目中。
在Main.storyboard,將一個 故事板引用從對象庫插入故事板的空白區域:
按Ctrl鍵從現有的標簽欄控制器的場景到故事板參考:
在彈出的出現,選擇視圖控制器從關系Segue公司部分。
選擇故事板引用您剛才添加。在屬性檢查器設置故事板到日記:
構建並運行你的應用程序; 你會看到一個標簽來處理清單,而另一個選項卡的日記條目 - 你的隊友制作的功能。現在,您可以使用您的姐妹在胳膊創建的故事板的場景和代碼添加日記:
注:目前這兩個標簽,在故事板顯示的標題標簽欄控制器項目。正確的標題將在距檢查表和日記故事板運行時加載。您可以更改標題Main.storyboard供自己參考,但它不會使在運行任何區別。是不是很煩人,當你有挖掘過一堆你的應用場景,當你只是想測試一個單一場景中的堆棧深埋?隨著故事情節的參考,你可以找出你所感興趣的場景變成自己的故事板,並指示該應用程序推出直入的。現在你會做的檢查單項目部分。
在Checklists.storyboard突出清單詳細視圖控制器,添加項目導航控制器和添加項目視圖控制器場景:
選擇編輯\ 重構到情節圖板,並命名新的故事情節ChecklistDetail.storyboard。確保集團仍設置為清單。
就像你的清單故事板,選擇清單詳細視圖控制器現場ChecklistDetail.storyboard,並使用 屬性檢查器檢查是初步視圖控制器。該清單詳細視圖控制器現在應該有它留下了一個箭頭,這表明它在故事板的第一個場景。
點擊坦然項目在項目浏覽器的頂部,然後單擊坦然目標並選擇常規選項卡。更改主界面到ChecklistDetail.storyboard:
構建並運行你的應用程序; 你會首先看到該清單詳細現場載荷:
哪裡有導航和標簽欄?由於視圖控制器不再嵌入導航或標簽欄控制器,你不會看到這兩個元素,你正在處理的項目,而故事情節。
注意:如果在所選擇故事板的初始視圖控制器需要通過SEGUE提供的數據這種方法會失敗。在這個項目中,ChecklistDetailViewController
已經建立了加載初始樣本數據。
對故事情節的場景的鮮為人知的特點是現場對接。大多數人甚至不會注意到它的存在-是嗎?你會在故事板當前所選場景的頂部找到它:
開箱,現場碼頭包含對當前視圖控制器,第一響應者,以及任何可用的展開塞格斯。但是你知道你可以添加你自己的看法現場對接?你總是能夠這樣做,但Xcode中7可以讓你的設計界面生成器中,這些附加的看法。
你在現場被告席添加任何觀點都不會被添加到您的視圖控制器的初始子視圖數組; 相反,你可以添加IBOutlets給他們,並利用它們在運行時。
在選擇坦然清單項目凸顯其表行一個無聊的灰色。現在,您將執行改變所選行的顏色,沒有在所有的代碼的驚人之舉 - 多虧了現場對接!
在ChecklistDetail.storyboard,選擇 清單詳細視圖控制器,將一個視圖從對象庫到現場碼頭:
新視圖將出現正上方,現場對接。您可以添加子視圖和控制這些停靠的意見,就像對待其他任何觀點。
選擇您添加的視圖,並使用屬性檢查器更改視圖的背景色為#FFFAE8。
在故事板視圖的大小並不重要,因為當它在細胞的使用會自動展寬。但是,如果你想讓它占用更少的空間,你可以通過拖動其頂部,左,右邊緣調整它的大小。
在文檔大綱,請按Ctrl鍵從ChecklistItemCell到新的觀點。選擇selectedBackgroundView從連接彈出:
構建並運行你的應用程序; 點擊任一行,它是由你的新觀點突出了。漂亮整潔的 - 和無碼一針一針!
注:此著色法僅適用於不具備多重選擇啟用表意見。彩色視圖只有一個實例被創建,它是在表視圖中每個單元之間共享。因此,它只能被應用到一個小區的時間。通常情況下,你將有一個觀點,你只需要在特定條件下顯示。設計這樣的觀點在所有的視圖控制器其他視圖總是在故事板相當困難。有在現場的碼頭景色的好處是,你可以創建它在視覺上不與您的視圖控制器的子視圖其余的干擾。你可以把它在需要時再添加到視圖層次中的代碼。
在坦然的樣本數據的檢查單項目都伴隨他們的筆記; 你現在要創建一個視圖來顯示項目的說明。當您點擊表格視圖行的項目,該行將會展開以顯示相關聯的注釋。再次點擊行或點擊不同的行折疊行,並從該行的說明圖。
不過在ChecklistDetail.storyboard,將一個新的 視圖冒頭碼頭,旁邊你在上一節中創建的選擇的背景圖。選擇視圖,並使用尺寸檢查設置其寬度320和高度以128。
將一個標簽從對象庫到新的視圖,並使用屬性檢查器更改標簽文本“ 注:”。您可能需要調整標簽,從而使文本適合。更改標簽的文本顏色為#BB991E:
接下來,將一個文本視圖從對象庫到新的觀點。刪除其默認Lorem存有使用文本屬性檢查器。取消選中行為 可編輯和可選擇的。調整和重新排列標簽和文本的意見,使他們觸摸他們容器的邊緣,使其看起來像這樣:
現在,您將連接此指出,以一個IBOutlet在視圖控制器。即使有在屏幕上的多個單元實例在同一時間,將有只有一個音符隨時查看實例,因此它不會成為一個問題,以這種觀點連接到一個出口。
隨著ChecklistDetail.storyboard在主編輯器中打開,打開ChecklistDetailViewController.swift的助理編輯。您可能需要關閉該文檔大綱使用圖標故事板下方,以獲得足夠的空間:
按住Ctrl鍵的新視角來ChecklistDetailViewController
創建出口略低於現有的視圖清單
屬性。確保您從視圖的拖動的背景,而不是從文本視圖或標簽。您也可以從場景中的碼頭視圖的圖標拖動。
命名出口為
NotesView,然後點擊連接。出口將顯示為一個屬性ChecklistDetailViewController。
現在,按Ctrl鍵從文本視圖ChecklistDetailViewController
只創建下面你剛才提出的另一個出口。命名出口notesTextView
並單擊連接。
最後,它的時間來寫一些代碼!:]你使用的iOS 9的另一個新功能UIStackView,添加和刪除的筆記與動畫的小區查看。
注:要了解更多有關UIStackView,一定要看看介紹堆疊視圖這是我們的一本書的摘錄的iOS 9教程。在ChecklistDetailViewController.swift,添加下面的方法來主類實現底部:
FUNC addNotesViewToCell(單元:ChecklistItemTableViewCell){ notesView.heightAnchor .constraintEqualToConstant(notesViewHeight)。主動= 真 notesView.clipsToBounds = 真 cell.stackView.addArrangedSubview(為NotesView)}
此方法可確保自動布局定義筆記視圖的高度,然後將其添加到單元格的堆棧視圖的arrangedSubviews
集合。它還設置clipsToBounds
以真
,以防止文本視圖從細胞外溢出,當你執行輕掃到刪除。
高度需要使用自動布局由於堆棧觀點源於其自身的高度,從它的高度設置arrangedSubviews。如果您沒有設置高度在這裡,當你添加了Notes視圖的細胞不會增長。
接著,添加下面的方法如下addNotesViewToCell(_
:):
func removeNotesView ( ) { if let stackView = notesView.superview as? UIStackView { stackView.removeArrangedSubview ( notesView ) notesView.removeFromSuperview ( ) } }
這消除了筆記堆棧視圖的查看arrangedSubviews
以及從其設定的可見子視圖。
接下來,你需要把這些方法使用。不過在ChecklistDetailViewController.swift,發現表視圖委托擴展ChecklistDetailViewController
並添加以下代碼:
覆蓋 FUNC的tableView(的tableView:UITableView 的, didSelectRowAtIndexPath方法indexPath:NSIndexPath){// 1 衛讓電池= tableView.cellForRowAtIndexPath(indexPath)作為 ?ChecklistItemTableViewCell 其他{ 返回} // 2 tableView.beginUpdates()// 3 if cell.stackView.arrangedSubviews. contains ( notesView ) { removeNotesView ( ) } else { addNotesViewToCell ( cell ) // 4 notesTextView.text = checklist.items [indexPath.row] .notes} // 5 tableView.endUpdates()}
此方法執行以下操作:
警衛
聲明,以確保有合適的類型,在繼續之前選定的指數路徑的有效的單元格。tableView.beginUpdates()
以動畫的改變細胞的高度。tableView.endUpdates()
來提交更改。最後-不要忘記,你剛才改變了項目的主界面。要改變項目的主界面返回主故事情節:點擊坦然項目在項目導航,點擊坦然目標,然後單擊在常規選項卡。更改主界面到Main.storyboard:
構建並運行你的應用程序; 點擊任一單元格,你應該看到備注視圖出現。使用堆疊視圖意味著你不需要手動設置任何幀或添加任何約束的單元格比一個定義Notes視圖的高度等。在iOS系統的早期版本中,這將一直較為棘手的落實。
注意:如果能夠在現場停靠創建一個視圖是有用的,但只有當它從一個視圖控制器單獨使用。如果補充視圖在整個應用程序重復使用,你會更好使用你的代碼實例化一個XIB文件。