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
今回は、コード記述のpushでの画面遷移についてまとめてみました。
WatchKitPushの一覧
Storyboard上のInterface Controller(View Controller)にIdentifierを指定します。
FirstInterfaceController -> Identifier :
firstInterfaceController
SecondInterfaceController -> Identifier : secondInterfaceController
ThirdInterfaceController -> Identifier : thirdInterfaceController
1番目のソースコード
FirstInterfaceController.swiftに記述します。
class FirstInterfaceController: WKInterfaceController {
// 最初に呼び出されるメソッド
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
// Configure interface objects here.
}
// pushSecondボタン押下時の処理 Second画面遷移
@IBAction func onPushSecondButtonPushed() {
pushControllerWithName("secondInterfaceControllerId", context: "gotoSecond!!")
}
引数nameには遷移先のInterfaceControllerのIdentifierを指定します。
IdentifierはStoryboardで設定します。
contextには遷移先のInterfaceControllerに受渡したい値を指定します。
contextはAnyObjectなのでなんでも受け渡せそうです。
(Swift言語のAnyObjectは様々なオブジェクトを表す型)
contextはnilを指定することもできますが、おすすめはしていないようです。
WatchKitにはiOSでいうNavigationControllerのようなものはありません。
pushControllerWithName:context:を実行するだけでpush画面遷移できます。
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.
}
// pushThirdボタン押下時の処理 Third画面遷移
@IBAction func onPushThirdButtonPushed() {
pushControllerWithName("thirdInterfaceControllerId", context: "gotoThird!!")
}
// popボタン押下時の処理 Pop遷移元に戻る
@IBAction func onPopButtonPushed() {
popController()
}
FirstInterfaceControllerのpushSecondボタン押下時に以下の様なログが表示されます。
2015-04-12 08:33:08.189 WatchKitPush WatchKit Extension[8425:5936126]
<WatchKitPush_WatchKit_Extension.SecondInterfaceController: 0x60800007c540> init context:gotoSecond!!
contextで値を受け渡せていることがわかります。
popControllerを実行すると前の画面に戻ることができます。
ただ、popで画面遷移すると、iOSのNavigationControllerのように自動的に左上に戻るボタンが表示されます。
戻るボタンは自分で実装する必要ないです。
3番目のソースコード
ThirdInterfaceController.swiftに記述します。
class ThirdInterfaceController: WKInterfaceController {
// 最初に呼び出されるメソッド
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
NSLog("%@ init context:%@", self, context as! String)
// Configure interface objects here.
}
// popボタン押下時の処理 Pop遷移元に戻る
@IBAction func onPopButtonPushed() {
popController()
}
// popToRootボタン押下時の処理 First画面に戻る
@IBAction func onPopToRootButtonPushed() {
popToRootController()
}
popToRootControllerを実行すると、一気にFirstInterfaceControllerに戻れます。
コメントをお書きください