2015年

4月

12日

Apple Watch Push画面遷移の作成 Swift

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

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

 

GitHub WatchKitPush


 

▫️参考にしたページ

Apple Watchの画面遷移 Objective-C

WatchKitでpush画面遷移 Swift

  

目 次