StoryBoard
新
下面是 術語 介紹
segue 轉場
一個視圖控制器在Storyboard中的官方術語是“場景(scene)”即横,但這兩種叫法是相通的。一個視圖控制器在Storyboard中可以叫做場景东囚。
也叫過Storyboard 分鏡tableview的表項
prototype cell 原型表項
static cell 靜態(tài)表項
靜態(tài)表項 需要把所有DataSource 的代理刪除掉deployment 部署
trait 特點
variation 差異
File inspector(文件檢查器)
自動布局(Auto Layout)
尺寸歸類(Size Classes
自動布局由iOS 6引入页藻,尺寸歸類由iOS 8引入。
關于 Size Classes
- embed 嵌入
把一個普通試圖控制器(viewController)嵌入一個 導航控制器(navigationController)
除了使用拖入導航控制器之外,還可以使用xcode 的菜單欄的按鈕來操作
如下: Editor -> Embed in -> Navigation Controller
-
關于 storyboard tableviewcell 創(chuàng)建.
- Prototype cell 類型
可以配置下面的屬性- Style
- Identifiler
- Accessory
- RowHeight
然后直接在代碼中使用這個cell
Prototype cell 必須在 .swift 文件中實現(xiàn) tableview的 DataSource 代理方法 - Prototype cell 類型
static cell 創(chuàng)建
不需要實現(xiàn)tabelview 的 DataSource 代理方法
直接在storyboard 中 的cell 空間中拖入什么控件 運行就會顯示什么, 而且 cell 中的控件可以跟 viewController 連線創(chuàng)建屬性 (prototype cell 則不行)
StoryBoard 和自定義cell文件
在storyboard中拖入tableview 會帶有一個 cell 選則cell 類型為 dynamic prototypes
創(chuàng)建cell 文件(.swift .h .m 不帶有xib)
在上面的storyBoard中 給 prototypecell 添加想要的控件.
在cell 文件中 添加相應的屬性 (以前都是直接連線創(chuàng)建屬性,現(xiàn)在是先創(chuàng)建屬性)
如先寫這樣的代碼:@IBOutlet weak var gameLabel:UILabel!
- 可以把屬性和控件連線連起來.
- 或者直接在storyboard 中 選中這個cell ->選中 shower the connections inspector 我們可以看到cell文件中創(chuàng)建的屬性都在這, 直接和相應的控件連線就好.
- 或者. 選中storyBoard 中的 cell. 把cell 和 cell 中的控件連線, 可以彈出cell 的屬性,把控件和這些屬性對應鏈接.
但不必為該表創(chuàng)建數(shù)據(jù)源璃吧,也不必為此編寫cellForRowAtIndexPath方法畜挨,你可以直接在Interface Builder中完成設計。這個特性叫做靜態(tài)表項(static cell)
static cell 不需要 data source 把 所有有關 dataoSource 代理方法全部刪掉
static cell 只在 UITableViewController 中有效, 其他 viewController 中編譯不通過
目前來講噩凹,使用原型表項或靜態(tài)表項就必須使用Storyboard。
- Trait Variations 和 Size Classes 使用
xcode8中的 Trait Variations 就是 Size Classes
自己寫的紅色 sizeClass demo 紅色view 在豎屏下顯示,橫屏下不顯示,
設置過程如下: storyBoard 中選中這個view , 控制面板中的 show the attributes inspector 中 選擇最后一個選項的加號, 設置為 wC hR installed
interface building 最下面的面板, 可以給不同大小的設備定制不同的約束.
- 選擇設備
- 選擇方向
- 選中按鈕 [Vary for Traits]
- 添加約束, 該約束只在此特定設備上起作用.[這里是抽象的設備 為 Size Class]
- 重復上面的步驟 給其他設備添加約束
不同設備的界面布局不同如何設置
- 針對不同的設備添加不同的約束[適用于 iPad 和 iPhone 完全是兩套布局時的情況]
使用
Vary for Traits
- 不區(qū)分設備先給最常用的布局添加約束, 再針對每個特定的約束 添加設備條件 [適合于所有設備都是同一個布局模式,每種設備大體布局不變,只有少數(shù)幾個約束會發(fā)生細微變化的情況]
不使用
Vary for Traits
- StoryBoard 界面跳轉
segue
-
Storyboard使用教程二
action segue (轉場)中的選項 - push
- model 模態(tài)轉場 相當于 present
- custom 自定義
控制器返回上個頁面, 返回的方法寫在上個頁面中.(表示很難理解)
返回上個頁面
返回按鈕控件和storyBoard中的Exit 連線, 選擇合適的退出方法.
凡是界面跳轉都會執(zhí)行下面的方法
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
}
- storyBoard 性能問題
storyBoard 中 視圖控制器是按需加載的,就像手動載入nib一樣幻赚。
界面返回 舉例
當返回上個頁面時, 比如你選擇了某個cell 來返回上個頁面, 程序先返回上個頁面 再執(zhí)行選中cell 的事件. 是不是很坑.(前提是 cell 的點擊事件綁定了 Exit)
這時候我們可以使用下面的方法來解決 每次返回上個頁面時都會先調(diào)用下,下面的方法
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SaveSelectedGame" {
}
}
關于 Storyboard 的文章
- Storyboard References 學習
- iOS 9: Day by Day 第三天 Storyboard引用
- iOS9 Day-by-Day :: Day 3 :: Storyboard References
- iOS 9 Storyboard 教程(一上)
拆分storyBoard
- 選中你要拆分的模塊
- Editor -> Refactor to StoryBoard [這個時候 會以你選中的內(nèi)容去新建一個storyBoard文件]
引入其他storyBoard
- 給需要的storyBoard 添加引用其他storyBoard 信息
- 拖入控件 StoryBoard Refefrence , 選中它, 在 Attribute inspector 中 填入
- StoryBoard 你要引用的storyBoard 名字
- Reference ID 你要引用的storyBoard 中哪一個控制器(記得在該控制器中 storyBoard ID 設置一樣的標識符)
- 連線 拖入的 StoryBoard Reference 控件
- storyboard 中手動跳轉
選中originViewController 右鍵連線到 destinationViewVOntoller 選中彈出菜單中的push\modal 或者別的.
storyBoard 中 界面跳轉自定義模式.
基于Storyboard的創(chuàng)建多分支NavigationController的方法
- 創(chuàng)建繼承 UIStoryboardSegue 的文件 比如: MyShowSegue:UIStoryboardSegue
- 在 文件 MyShowSegue 中重寫方法
perform
在這個方法中自定義一些東西 - 當你在StoryBoard 中連線的時候, 除了彈出 菜單 show push modal 外 還有我們剛剛創(chuàng)建的這中類型 My Show