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