跨平台 – 有没有一种很好的方法来模拟iOS中的Android片段模式?

我们在我们的应用程序中使用MvvmCross.在我们的
Android应用中,我们使用
NavigationDrawer作为菜单.我们加载包含NavigationDrawer和ContentFrame的HomeView.

<android.support.v4.widget.DrawerLayout >

    <!-- The main content view -->
    <FrameLayout android:id="@+id/content_frame" />

    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer" />

</android.support.v4.widget.DrawerLayout>

触发OnCreate()方法时,我们会根据数据库查询将AudioPlayerFragment加载到content_frame中.在同一方法中,我们设置了一个监听器,等待用户单击导航抽屉中的ListItem之一.

protected override void OnCreate(Bundle bundle) {
   // do stuff to build the nav drawer
    _topDrawerList = FindViewById<MvxListView>(Resource.Id.left_drawer);
    _topDrawerList.ItemClick += (sender, args) = > SelectItem(args.Position, null);

    if(bundle == null)
        SelectItem(0, null);
}

private void SelectItem(int position, UserViewModel currentUser) {
    SupportFragmentManager.BeginTransaction()...
}

我们的应用程序运行良好,我喜欢HomeView是应用程序的唯一视图.其他一切都是碎片.

在我们的Core库中,我们有一个ViewView的ViewModel,我们还为应用程序中的每个Fragment提供了一个ViewModel.再次,这对我们来说很有用.

  • PCL
    • ViewModels
      • HomeViewModel
      • AudioPlayerViewModel <– vm for fragment
      • LoginFragmentViewModel <– vm for fragment
  • Droid.Ui
    • Fragments
      • AudioPlayerFragment
      • LoginFragment
    • Views
      • HomeView <– Just a container View as the entry point to the app. Everything else is fragmented… AudioPlayerFragment is
        loaded instantly.

现在我正在尝试构建一个匹配的iOS应用程序,但我无法弄清楚如何构建它.本质上我喜欢完全相同的行为,其中HomeView是入口点,并且可以包含SlidingPanel位和某些形式的ContentFrame,其他“视图”可以加载到其中.

不幸的是,现在我已经有了这个愚蠢的MenuView来处理,还有一个相应的MenuViewModel ……我真的不想要.

  • PCL
    • ViewModels
      • HomeViewModel
      • AudioPlayerViewModel <– vm for fragment
      • LoginFragmentViewModel <– vm for fragment
  • Touch UI
    • Views
      • AudioPlayerView
      • HomeView
      • LoginView
      • MenuView <– UGLY!!!
    • ViewModels
      • MenuViewModel <– UGLY!!!

我真的不想为菜单创建自定义View / ViewModel.我正在使用SlidingPanels作为导航抽屉的iOS“版本”,我看到的教程需要一个额外的View / ViewModel作为菜单.

有没有办法做到这一点并保持ViewModels的连续性,以便它们都可以在PCL中重用?是否有一种很好的(阅读清洁)方式以类似于Android的方式构建布局结构?

最佳答案 已经有一些尝试提供由便携式代码驱动的统一用户界面.在MvvmCross中,这些特别是由用户界面的MonoTouch.Dialog类型方法驱动.一个这样的尝试/实验称为“自动视图” – 您可以在以下操作中看到它:

> http://slodge.blogspot.co.uk/2013/02/recap-on-what-are-autoviews.html
> https://github.com/MvvmCross/MvvmCross-Tutorials/tree/master/AutoViewExamples

在此自动视图层下方,可以在对话级别的MvvmCross内轻松共享更多View代码 – 例如见https://github.com/MvvmCross/MvvmCross-Tutorials/tree/master/DialogExamples

然而……据说…迄今为止,大多数自动视图工作仍然专注于提供快速原型而不是完成的应用程序.对于完整的丰富用户界面,大多数开发人员仍然提供自定义UI.

I simply can’t wrap my head around the iOS UI. It feels so very foreign to me in comparison to Android.

这并不罕见 – 大多数XAML开发人员比UIKit更快地采用AXML.但是,如果您花一些时间构建一些UIViews并使用UIViewControllers构建一些用户界面(页面),那么我认为您将很快得到UIKit的支持.此外,我很有信心,一旦你开始看到像UIKit动画这样基于代码的力量,那么你甚至会开始坠入爱河!

点赞