■実装
1.新規プロジェクトを作成
2.Apple Watchターゲットを追加
3.Frameworkに「WatchKit.framework」を追加
4.Storyboard上にInterface Controller(View Controller)を3つ配置しボタンを配置します。
Apple Watchでは3種類の画面遷移がありますが。
push
modal
page
今回は、コード記述のpushでの画面遷移についてまとめてみました。
WatchKitObjPush一覧
Storyboard上のInterface Controller(View Controller)にIdentifierを指定します。
FirstInterfaceController -> Identifier :
firstInterfaceController
SecondInterfaceController -> Identifier : secondInterfaceController
ThirdInterfaceController -> Identifier : thirdInterfaceController
1番目のソースコード
FirstInterfaceController.mに記述します。
@implementation FirstInterfaceController
// 最初に呼び出されるメソッド
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
// Configure interface objects here.
}
// Second画面遷移アクション
- (IBAction)onPushSecondButtonPushed:(id)context {
// pushController Identifier:secondInterfaceController
[self pushControllerWithName:@"secondInterfaceController" context:@"gotoSecond!!"];
}
引数nameには遷移先のInterfaceControllerのIdentifierを指定します。
IdentifierはStoryboardで設定します。
contextには遷移先のInterfaceControllerに受渡したい値を指定します。
contextはidなのでなんでも受け渡せそうです。
『id』は、インスタンスを生成する時、どんなクラスのインスタンスでも入れることができる、汎用的に使える動的オブジェクト型です。
contextはnilを指定することもできますが、おすすめはしていないようです。
(nilの動作確認をしてみましたが問題無く動作はしています。)
WatchKitにはiOSでいうNavigationControllerのようなものはありません。
pushControllerWithName:context:を実行するだけでpush画面遷移できます。
2番目のソースコード
SecondInterfaceController.mに記述します。
@implementation SecondInterfaceController
// 最初に呼び出されるメソッド
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
// Configure interface objects here.
NSLog(@"context:%@", context);
}
// Third画面遷移アクション
- (IBAction)onPushThirdButtonPushed:(id)context {
// pushController Identifier:thirdInterfaceController
[self pushControllerWithName:@"thirdInterfaceController" context:@"gotoThird!!"];
}
// Pop遷移元に戻るアクション
- (IBAction)onPopButtonPushed {
// popController
[self popController];
}
FirstInterfaceControllerのpushSecondボタン押下時に以下の様なログが表示されます。
2015-04-11 20:25:43.939 WatchKitObjPush WatchKit Extension[7638:4507843] context:gotoSecond!!
contextで値を受け渡せていることがわかります。
popControllerを実行すると前の画面に戻ることができます。
ただ、popで画面遷移すると、iOSのNavigationControllerのように自動的に左上に戻るボタンが表示されます。
戻るボタンは自分で実装する必要ないです。
3番目のソースコード
ThirdInterfaceController.mに記述します。
@implementation ThirdInterfaceController
// 最初に呼び出されるメソッド
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
// Configure interface objects here.
// gotoThird!!
NSLog(@"context:%@", context);
}
// Pop遷移元に戻るアクション
- (IBAction)onPopButtonPushed {
[self popController];
}
// First画面に戻るアクション
- (IBAction)onPopToRootButtonPushed{
[self popToRootController];
}
popToRootControllerを実行すると、一気にFirstInterfaceControllerに戻れます。
コメントをお書きください