この投稿は Apple Watch Advent Calendar 2014 の 11日目の記事です。
上のスクショのように 画面を横にスワイプして簡単に切り替えられるApple Watchアプリ を作ろうとして、PageControllに相当するクラスを探していたのですが、
- WKInterfaceButton
- WKInterfaceDate
- WKInterfaceGroup
- WKInterfaceImage
- WKInterfaceLabel
- WKInterfaceMap
- WKInterfaceSeparator
- WKInterfaceSlider
- WKInterfaceSwitch
- WKInterfaceTable
- WKInterfaceTimer
・・・あれ?それらしきものがない!!
というわけで、Appleが公開しているサンプルコードWatchKit Catalogの中にそれっぽいことをしている個所がないか探してみることに。
そしたら、ありました!
どうやっていたか
presentControllerWithNames:contexts: というメソッドを使ってました。
Appleのドキュメントに
Presents a page-based interface modally.
とあるように、pageベースの画面をモーダル表示してくれるようです。
第1引数に 表示したい画面(WKInterfaceController)の Identifier を配列で渡すことにより、自動的にPageControlを作ってくれます。
NSArray *controllerNames = @[@"pageController", @"pageController", @"pageController", @"pageController", @"pageController"];
[self presentControllerWithNames:controllerNames contexts:nil];
上の例では PageController
という Identifier を持った画面を5つ並べた画面をモーダル表示します。(スクリーンショットを載せたいのですが、NDAに違反する可能性があるのでやめておきます)
疑問点
モーダルでPageControlを表示できるのはわかったんですが、初期画面でPageControlを表示する方法がわかってません。できればモーダルを挟まずにPageControlを表示したいのですが、その方法を知っている方がいらっしゃいましたらぜひ教えて下さい!
追記:
初期画面でPageControlを表示する方法をコメント欄で教えて頂きました!
@fmtonakai さん、ありがとうございました!
追記2:
Xcode6.2 beta2で reloadRootControllersWithNames:contexts:
というメソッドが追加されており、そちらを使うことで初期画面でもPageControlを表示できるようです。