2015年

4月

11日

Apple Watch Push画面遷移の作成 Objective-C

Apple Watch コード記述による画面遷移の作成

■実装
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に戻れます。

 

GitHub WatchKitObjPush


  

目 次