本文章是一個系列厘线,如果有興趣可以看看以下文章:
AppleWatch開發(fā)入門(1)——界面布局
AppleWatch開發(fā)入門(2)——代碼交互、控制器生命周期出革、界面跳轉(zhuǎn)
AppleWatch開發(fā)入門(3)——Table視圖的應(yīng)用
AppleWatch開發(fā)入門(4)——Picker視圖的應(yīng)用
AppleWatch開發(fā)入門(5)——Menu的使用
AppleWatch開發(fā)入門(6)——watchOS中通知的應(yīng)用
AppleWatch開發(fā)入門(7)——AlertController
AppleWatch開發(fā)入門(8)——動畫
一造壮、引言
在前面的文章,討論了關(guān)于 iWatch 開發(fā)中框架與界面布局相關(guān)骂束,主要的邏輯耳璧,終究還是要通過代碼來實(shí)現(xiàn)的,在我們創(chuàng)建了項(xiàng)目之后展箱,就會生成 InterfaceController 這個文件旨枯,它就是我們 storyboard 中的入口視圖控制器。此外混驰,在 iWatch 開發(fā)中攀隔,目前只能用 storyboard 來開發(fā)皂贩。
二、代碼交互與控制器聲明周期
storyboard 中的控件我們可以通過拖拽的方式關(guān)聯(lián)到文件中昆汹,Action 和 Outlet 兩種關(guān)聯(lián)方式基本可以達(dá)到我們修改控件和處理業(yè)務(wù)邏輯的需求明刷。
WKInterfaceController 類似于 iOS 中的 ViewController,是 iWatch 中主要用于展示界面的 Controller满粗,我們的控件也都是基于這個容器中顯示辈末。在模板中,系統(tǒng)為我們提供了三個函數(shù)映皆,這三個函數(shù)體現(xiàn)了 watch 一個界面的聲明周期挤聘,如下:
// 初始化界面時觸發(fā),通過context可以實(shí)現(xiàn)界面的傳值
override func awake(withContext context: Any?) {
super.awake(withContext: context)
}
// 界面即將展現(xiàn)時觸發(fā) 類似于iOS中的ViewWillApear
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
}
// 界面消失后觸發(fā)捅彻,類似于iOS中的ViewDidDisAppear
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
三檬洞、界面跳轉(zhuǎn)與傳值
與 iOS 類似,watchOS 的界面跳轉(zhuǎn)也有兩種方式:modal 和 push沟饥。同樣,我們可以通過 storyboard 或者代碼來進(jìn)行跳轉(zhuǎn)湾戳。
1贤旷、通過代碼跳轉(zhuǎn)與傳值
我們創(chuàng)建兩個 InterfaceController 和與之對應(yīng)的類,界面如下:
通過代碼跳轉(zhuǎn)砾脑,一定要給第二個控制器設(shè)置一個 Identifier 標(biāo)識符:
在按鈕觸發(fā)的方法中,如下跳轉(zhuǎn):
// modal
@IBAction func presentMyController() {
// 這里的context是傳值的上下文韧衣,在被跳轉(zhuǎn)控制器的awakeWithContext方法中會將這個值取到
// InterfaceControllerTwo 是在上文提到的 Identifier
presentController(withName: "InterfaceControllerTwo", context: "我是傳的值")
}
// push
@IBAction func pushMyController() {
pushController(withName: "InterfaceControllerTwo", context: nil)
}
2盅藻、在 storyboard 中設(shè)置跳轉(zhuǎn)關(guān)系
也可以直接在 storyboard 中設(shè)置界面的跳轉(zhuǎn),右鍵拖拽觸發(fā)跳轉(zhuǎn)事件的控件畅铭,拖拽到將要跳轉(zhuǎn)的控制器氏淑,會出現(xiàn) push 和 model 菜單午磁,如下圖磅甩。
通過這種方式進(jìn)行的跳轉(zhuǎn),在執(zhí)行跳轉(zhuǎn)之前者春,會執(zhí)行如下這個函數(shù):
// 這個方法的返回值就是 context 上下文傳遞的值炉擅。
override func contextForSegue(withIdentifier segueIdentifier: String) -> Any? {
return "我是值"
}