Xcode 6.3 以上(6.3にて制作)
https://developer.apple.com/xcode/downloads/
6.2からAppleWatch開発環境(watchkit)が入っています。
iOS8.2以上 (iPhone)
8.2にバージョンアップするとアプリ「Apple Watch」が追加されるのですぐわかります。
■実装
1.新規プロジェクトを作成
2.Apple Watchターゲットを追加
3.Frameworkに「WatchKit.framework」を追加
4.Storyboard上にInterface Controller(View Controller)を3つ配置しボタンを配置します。
Apple Watchでは3種類の画面遷移がありますが。
push
modal
page
今回は、コード記述のmodalでの画面遷移についてまとめてみました。
Modalの動作
Second画面が下から上に画面がかぶさります。
WatchKitPushの一覧
Storyboard上のInterface Controller(View Controller)にIdentifierを指定します。
FirstInterfaceController -> Identifier :
firstInterfaceController
SecondInterfaceController -> Identifier : secondInterfaceController
1番目のソースコード
FirstInterfaceController.swiftに記述します。
class FirstInterfaceController: WKInterfaceController {
// 最初に呼び出されるメソッド
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
// Configure interface objects here.
}
// Second画面遷移アクション Modal
@IBAction func onModalSecondButtonModal() {
// presentControllerWithName Identifier:secondInterfaceController
presentControllerWithName("secondInterfaceController",context:"gotoSecond!!")
}
引数nameには遷移先のInterfaceControllerのIdentifierを指定します。
IdentifierはStoryboardで設定します。
contextには遷移先のInterfaceControllerに受渡したい値を指定します。
contextはAnyObjectなのでなんでも受け渡せそうです。
(Swift言語のAnyObjectは様々なオブジェクトを表す型)
contextはnilを指定することもできますが、おすすめはしていないようです。
WatchKitにはiOSでいうNavigationControllerのようなものはありません。
presentControllerWithName:context:を実行するだけでModal画面遷移できます。
2番目のソースコード
SecondInterfaceController.swiftに記述します。
class SecondInterfaceController: WKInterfaceController {
// 最初に呼び出されるメソッド
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
NSLog("%@ init context:%@", self, context as! String)
// Configure interface objects here.
}
// Dismiss画面を閉じるアクション
@IBAction func onDismissButtonDismis() {
// 閉じる
dismissController()
}
FirstInterfaceControllerのModalSecondボタン押下時に以下の様なログが表示されます。
2015-04-12 19:33:50.244 WatchKitSwiModal WatchKit Extension[12351:8441205]
<WatchKitSwiModal_WatchKit_Extension.SecondInterfaceController: 0x608000072040> init context:gotoSecond!!
contextで値を受け渡せていることがわかります。
dismissControllerを実行すると画面が閉じて前の画面が表示されます。
ただ、Modalで画面遷移すると、iOSのNavigationControllerのように自動的に左上に戻るボタンが表示されます。
戻るボタンは自分で実装する必要ないです。
コメントをお書きください