元のドキュメント: developer.apple.com/documentation/watchkit/navigating-between-scenes


記事


シーン間の移動


ユーザーがインターフェースコントローラ間を移動できるようにします。





概観


WatchKit は、watchOS におけるシーン間の移動として 3 つのスタイルをサポートしています。


ページ間の移動

ページ形式のインターフェイスは 2 つ以上の独立したインターフェイスコントローラで構成され、一度に 1 つを表示します。デフォルトでは、ユーザーは左右にスワイプしてシーン間を移動します。画面下部のページコントロールには、ページ内での現在の位置が表示されます。垂直方向のページングに切り替えるには、Attributes (属性) インスペクタでインターフェイスコントローラの「Page Direction」(ページ方向) 属性を設定します。


プッシュ型移動

プッシュ型インターフェイスは、単一のルートインターフェイスコントローラから始まります。現在のインターフェイス上のコントロールを操作すると、新しいシーンが画面に push (プッシュ) されます。同様に、前のコントローラに pop(戻る) ことも可能です。プッシュ型の移動は、特に階層構造を持つ情報を表示する際に役立ちます。例えば、ユーザーがリストから項目を選択した際に、その項目の詳細ビューをプッシュ表示するといった使い方が挙げられます。


モーダル表示

ユーザーのワークフローを一時的に中断して入力を求めたり、追加情報を表示したりする際には、モーダル表示を使用します。モーダル表示自身は、単一の画面で構成することも、複数の画面を含むページ形式のレイアウトにすることも可能です。


WatchKit では、入力を受け付けたり特定の種類の情報を表示したりするための標準的なインターフェイスもいくつかサポートされています。これらのインターフェイスを表示するには、以下のメソッドを使用します。


Alert and action sheets (アラートとアクションシート)

presentAlert(withTitle:message:preferredStyle:actions:) メソッドを使用して、標準的なインターフェイスでアラートを表示し、ユーザーからの入力を求めます。


テキストの入力

ユーザーからのテキスト入力を受け取るには、presentTextInputController(withSuggestions:allowedInputMode:completion:) メソッドを使用します。このメソッドは、定義済みのフレーズ、音声入力、「スクリブル(Scribble)」などの適切な入力オプションを備えたコントローラを表示します。


Video and audio playback (ビデオとオーディオ再生)

音声や動画を再生するには、presentMediaPlayerController(with:options:completion:) メソッドを使用します。


音声の録音

標準の音声録音インターフェイスを表示するには、presentAudioRecorderController(withOutputURL:preset:options:completion:) メソッドを使用します。


PassKit パス

ユーザーの Apple Watch にパスを追加するためのインターフェイスを表示するには、presentAddPassesController(withPasses:completion:) メソッドを使用します。


標準のインターフェースにはボタンが組み込まれており、ユーザーはいつでもそれらを閉じることができます。また、多くのインターフェースには、プログラムからインターフェースを閉じるためのメソッドも用意されています。インターフェースがアクティブな間、あなたのアプリがそのインターフェースでの操作を直接制御することはできません。インターフェース自体に関連する処理を行うには、アクションや完了ハンドラを使用してください。





ページ間の移動を実装する


ページ間の移動を設定するには、ストーリーボード上で 2 つ以上のインターフェイスコントローラを「次のページ」へのセグエで接続します。


まずは、各ページに対応するインターフェイスコントローラをストーリーボードに追加することから始めます。



最初のインターフェイスコントローラを Control+クリックし、2 番目のインターフェイスコントローラまでドラッグします。セグエが作成可能であることを示すために、2 番目のコントローラが強調表示されるはずです。



マウスボタンを放し、Relationship Segue(リレーションシップ・セグエ)のポップアップメニューから「next page」を選択します。



同様に、Control+クリックしてドラッグする操作を続け、残りのページを接続していきます。


セグエを作成する順序によって、インターフェイス内でのページの順序が決まります。あなたのアプリの起動時、システムは「次のページ」へ移動するセグエで接続されたすべてのインターフェイスコントローラを生成・初期化します。デフォルトでは、その一連のシーケンスにおける最初のインターフェイスコントローラが表示されます。開始ページを変更したい場合は、インターフェイスコントローラの init() または awake(withContext:) メソッド内で becomeCurrentPage() メソッドを呼び出します。


表示するページのセットを変更することもできます。インターフェイス コントローラーの reloadRootPageControllers(withNames:contexts:orientation:pageIndex:) メソッドを呼び出し、ストーリーボードで定義されたインターフェイスコントローラーの識別子の配列を渡します。


ユーザーがページからページに移動すると、watchOS はインターフェイスコントローラーをアクティブ化および非アクティブ化します。これらの遷移を追跡するには、コントローラーの willActivate()didAppear()willDisparent()、および DidDeactivate() メソッドを使用します。



プッシュ型移動の実装


プッシュ型移動を使用する場合、プッシュセグエはストーリーボード上で定義することも、コード内でプログラム的に定義することも可能です。ストーリーボードにプッシュセグエを追加するには、ボタン、グループ、またはテーブルの行から、新しいインターフェイスコントローラ内の目的のコントロールに向かって Control+ドラッグします。



次に、Action Segue のポップアップメニューから「Push」を選択します。



あるいは、pushController(withName:context:) メソッドを呼び出すことで、プログラムからプッシュの遷移を開始することもできます。


@IBAction func pushNextScene() {
    // Do something before triggering the segue here.
    pushController(withName: "nextSegue", context: nil)
}

新しいインターフェースコントローラを画面にプッシュする際は、セグエのコンテキストを使用して、その新しいインターフェースコントローラにデータを渡してください。


  • Storyboard で定義されたセグエ(segue)については、インターフェースコントローラの contextForSegue(withIdentifier:) メソッド(または関連するメソッドのいずれか)をオーバーライドして、コンテキストを提供します。

  • プログラムでトリガーされるセグエについては、pushController(withName:context:) メソッドの context パラメータとしてデータを渡してください。

  • 画面に表示される前に、コンテキストを使用して新しいインターフェイスコントローラに状態データを渡します。


    プッシュで表示されたインターフェイスコントローラには、ユーザーが前の画面に戻れることを示す「戻る」ボタンが画面の左上隅に表示されます。ユーザーが「戻る」ボタンをタップするか、画面の左端からスワイプ操作を行うと、watchOS は自動的に最前面にあるインターフェイスコントローラを閉じます。また、pop() メソッドを呼び出してプログラムからインターフェイスコントローラを閉じることもできますが、アプリのメインインターフェイスコントローラを閉じることはできません。


    表は項目のページ化をサポートしています。この機能を有効にすると、ユーザーは一連の詳細ビューをスムーズにスクロールして閲覧できます。ユーザーが表から項目を選択すると、アプリはその項目の詳細ビューを表示します。ユーザーは上下にスクロールすることで、同じ階層にある他の項目へ移動できます。詳細については、WKInterfaceTable Class Reference の Support Item Pagination を参照してください。



    モーダルインターフェースを表示する


    モーダルインターフェイスは、ユーザーへの確認や追加情報の表示を行うために、現在のナビゲーションフローを一時的に中断するものです。あなたのアプリの主なナビゲーションスタイルにかかわらず、任意のインターフェイスコントローラからモーダルインターフェイスを表示できます。インターフェイスコントローラをモーダル表示するには、以下のいずれかの操作を行います。


  • ストーリーボードファイルにモーダルセグエを作成します。

  • 単一のインターフェースコントローラをモーダル表示するには、presentController(withName:context:) メソッドを呼び出します。

  • ページを基礎としたレイアウトを使用して、2 つ以上のインターフェースコントローラをモーダル表示するには、presentController(withNames:contexts:) または presentController(withNamesAndContexts:) メソッドを呼び出します。

  • ストーリーボードファイルでモーダルセグエを作成するには、(Push セグエを追加する場合と同様に)ボタン、グループ、またはテーブルの行から Contro+ドラッグします。そして、「Action Segue」ポップアップメニューから「Modal」セグエを選択します。



    ページを基礎としたレイアウトで複数のシーンを表示するには、「Next Page」セグエを使用してすべてのモーダルシーンを接続します(これは通常のページの移動と同様の手順です)。次に、そのグループの最初のインターフェイスコントローラに対してモーダルセグエを作成します。グループの途中にあるインターフェイスコントローラにモーダルセグエを接続する場合、システムはそれより前にあるインターフェイスコントローラは表示しません。


    モーダルインターフェイスは、左上隅にそのタイトルを表示します。ユーザーがそのタイトルをタップすると、watchOS はモーダルインターフェイスを閉じます。インターフェイスコントローラのタイトルは、モーダルインターフェイスを閉じるという動作の意味を反映したものに設定してください。例えば、「Done(完了)」や「Close(閉じる)」などが考えられます。モーダルインターフェイスコントローラのタイトルを指定しない場合、watchOS はデフォルトで「Cancel(キャンセル)」と表示します。




    References





    class WKInterfaceController

    (developer.apple.com/documentation/watchkit/wkinterfacecontroller)

  • presentAlert(withTitle:message:preferredStyle:actions:)
  • 現在のインターフェースコントローラ上に、アラートまたはアクションシートを表示します。


  • presentTextInputController(withSuggestions:allowedInputMode:completion:)
  • ユーザーからテキスト入力を受け付けるためのモーダルインターフェースを表示します。


  • presentMediaPlayerController(with:options:completion:)

  • presentAudioRecorderController(withOutputURL:preset:options:completion:)

  • presentAddPassesController(withPasses:completion:)













  • トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ