Xamarin での watchOS ナビゲーションの操作

ウォッチで使用できる最も簡単なナビゲーション オプションは、現在のシーンの上に表示されるシンプルなモーダル ポップアップです。

マルチシーン ウォッチ アプリでは、次の 2 つのナビゲーション パラダイムを使用できます。

PresentController メソッドを使用して、インターフェイス コントローラーをモーダルで開きます。 インターフェイス コントローラーは Interface.storyboard で既に定義されている必要があります。

PresentController ("pageController","some context info");

モーダル表示コントローラーは、画面全体を使用します (前のシーンをカバーします)。 既定では、タイトルは [キャンセル] に設定され、タップするとコントローラーが閉じます。

プログラムでモーダル表示コントローラーを閉じるには、DismissController を呼び出します。

DismissController();

モーダル画面は、単一のシーンにすることも、ページベースのレイアウトを使用することもできます。

階層ナビゲーション

iOS での UINavigationController の動作と同様に、戻ることのできるスタックのようなシーンを表示します。 シーンは、ナビゲーション スタックにプッシュしてポップオフできます (プログラムによって、またはユーザーによる選択によって)。

Scenes can be pushed onto the navigation stackScenes can be popped off of the navigation stack

iOS と同様に、左端のスワイプで階層ナビゲーション スタック内の親コントローラーに戻ります。

WatchKitCatalogWatchTables の両サンプルには、階層ナビゲーションが含まれています。

コードでのプッシュとポップ

Watch Kit では、iOS のようにオーバーアーキングな "ナビゲーション コントローラー" を作成する必要はありません。PushController メソッドを使用してコントローラーをプッシュするだけで、ナビゲーション スタックが自動的に作成されます。

PushController("secondPageController","some context info");

時計の画面には左上に戻るボタンが含まれますが、プログラムの PopController を使用してナビゲーション スタックからシーンを削除することもできます。

PopController();

iOS と同様に、PopToRootController を使用してナビゲーション スタックのルートに戻ることもできます。

PopToRootController();

Segues の使用

ストーリーボード内のシーンとシーンの間に Segues を作成して、階層ナビゲーションを定義できます。 ターゲット シーンのコンテキストを取得するために、オペレーティング システムは新しいインターフェイス コントローラーを初期化するために GetContextForSegue を呼び出します。

public override NSObject GetContextForSegue (string segueIdentifier)
{
  if (segueIdentifier == "mySegue") {
    return new NSString("some context info");
  }
  return base.GetContextForSegue (segueIdentifier);
}

ページ ベースのインターフェイス

ページベースのインターフェイスは、iOS での UIPageViewController の動作と同様に左から右にスワイプします。 インジケーターのドットが画面の下部に表示され、現在表示されているページが表示されます。

Sample first pageSample second pageSample fifth page

ページ ベースのインターフェイスをウォッチ アプリのメイン UI にするには、インターフェイス コントローラーとコンテキストの配列と共に ReloadRootControllers を使用します。

var controllerNames = new [] { "pageController", "pageController", "pageController", "pageController", "pageController" };
var contexts = new [] { "First", "Second", "Third", "Fourth", "Fifth" };
ReloadRootControllers (controllerNames, contexts);

アプリ内の他のシーンの 1 つの PresentController を使用して、ルートではないページ ベースのコントローラーを表示することもできます。

var controllerNames = new [] { "pageController", "pageController", "pageController", "pageController", "pageController" };
var contexts = new [] { "First", "Second", "Third", "Fourth", "Fifth" };
PresentController (controllerNames, contexts);