MvvmCross プレゼンターには、非常に小さなインターフェイスがあります。
N=24 ビデオの分割ビューの例は次のとおりです。
public class SplitPresenter : MvxBaseTouchViewPresenter
{
private SplitViewController _svc;
public SplitPresenter(UIWindow window)
{
_svc = new SplitViewController();
window.RootViewController = _svc;
}
public override void Show(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest request)
{
var viewController = (UIViewController)Mvx.Resolve<IMvxTouchViewCreator>().CreateView(request);
if (request.ViewModelType == typeof(FirstViewModel))
_svc.SetLeft(viewController);
else
_svc.SetRight(viewController);
}
}
これは UIKit と対話する C# にすぎないため、ユーザーが拡張することは非常にオープンです。
たとえば、次のことができます。
プレゼンターを拡張して、ナビゲーション コントローラーとスプリットビュー コントローラーの両方を含めると、ショー リクエスト中に RootViewController を適切に変更できます。
または、splitviewcontroller をナビゲーション コントローラーの子としてプッシュすることを検討することもできます (これにより、元に戻すのが簡単になります!)
または、splitviewcontroller をルート コントローラーのままにして、ログイン ビューをモーダル表示として上部に表示することを検討することもできます。
または...本当にオプションは開いています-これはUIKitのパワー、柔軟性、および時折の癖と組み合わされたC#です
補足: 個人的には、より複雑な UI を構築し始めると、プレゼンテーションの責任を集約し始めることがよくあります。たとえば、次のようになります。
- ビューを所有するタブに新しいビュー/ビューモデルを表示する場所を決定するように要求するN=25プレゼンターで
- このオペコード ブログ投稿では、CustomPresenter がさまざまなビューモデル リクエストに登録したフラグメント アクティビティ ホストのカスタム リストを保持しています (登録時とその後のリクエストに対する処理は完全に彼ら次第です)。
これは単なる C# であるため、あるパラダイム (タブなど) から別のパラダイム (splitView など) に変化する UI を構築するのはかなり簡単で、それらの UI は適切にカプセル化されています。