次の方法で共有


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

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

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

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

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

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

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

DismissController();

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

階層ナビゲーション

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

シーンはナビゲーション スタックにプッシュできます シーンはナビゲーション スタックからポップできます

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

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

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 の動作と同様に左から右にスワイプします。 インジケーターのドットが画面の下部に表示され、現在表示されているページが表示されます。

最初のページのサンプル 2 ページ目のサンプル 5 ページ目のサンプル

ページ ベースのインターフェイスをウォッチ アプリのメイン 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);