在 Xamarin 中使用 tvOS 拆分视图控制器

警告

iOS Designer 在 Visual Studio 2019 版本 16.8 和 Visual Studio 2019 for Mac 版本 8.8 中已经弃用,并且已从 Visual Studio 2019 版本 16.9 和 Visual Studio for Mac 版本 8.9 中移除。 要生成 iOS 用户界面,建议直接在运行 Xcode 的 Interface Builder 的 Mac 上操作。 有关详细信息,请参阅用 Xcode 设计用户界面

拆分视图控制器同时在屏幕上同时呈现和管理主视图控制器和详细信息视图控制器。 拆分视图控制器用于在主视图(左侧较小的部分)中呈现持久、可聚焦的内容,以及详细信息视图中的相关详细信息(右侧较大部分)。

示例拆分视图

关于拆分视图控制器

如上所述,拆分视图控制器管理并排显示的母版和详细信息视图控制器,主控形状是左侧较小的视图,右侧是详细信息。

此外,主视图控制器也可以根据需要隐藏或显示:

主视图控制器隐藏

拆分视图控制器通常用于显示可筛选内容的列表,主视图和筛选结果中的类别在详细信息视图中。 这通常显示为左侧的表视图和右侧的集合视图

设计需要拆分视图控制器的用户界面时,Apple 建议使用主视图和详细信息视图控制器(仅更改内容,而不是结构)。 如果需要交换视图控制器,最好使用导航控制器作为需要更改的视图控制器的基础(主控形状或详细信息)。

Apple 具有以下使用拆分视图控制器的建议:

  • 使用正确的拆分百分比 - 默认情况下,拆分视图控制器对主视图控制器使用三分之一的屏幕,对详细信息视图控制器使用三分之二。 另外,也可以使用 50/50 拆分。 选择正确的百分比以使内容在屏幕上保持平衡。
  • 保留主选择 - 虽然详细信息视图中的内容可以更改是对主视图中用户选择的响应,但主视图内容应固定。 此外,还应在主视图中清楚地显示当前选定的项。
  • 使用单个统一标题 - 通常,需要在详细信息视图中使用单个居中标题,而不是在“详细信息”和“主视图”中使用标题。

拆分视图控制器和情节提要

在 Xamarin.tvOS 应用中使用拆分视图控制器的最简单方法是使用 iOS 设计器将它们添加到应用的 UI。

  1. 在“Solution Pad”中,双击 Main.storyboard 文件并将其打开进行编辑。

  2. 工具箱中拖动拆分视图控制器并将其拖放到视图上:

    拆分视图控制器

  3. 默认情况下,iOS 设计器将在主视图中安装导航控制器和视图控制器。 如果这不符合应用的要求,只需将其删除。

  4. 如果确实删除默认主视图,请将新的视图控制器拖到设计图面上:

    视图控制器

  5. 按住 Control 点按 并从拆分视图控制器拖动到新的主视图控制器。

  6. 弹出菜单中选择“主”

    从弹出菜单中选择主项

  7. 设计主视图和详细信息视图的内容:

    示例布局

  8. Properties Pad 的“小组件”选项卡中分配名称,以在 C# 代码中使用 UI 控件。

  9. 保存更改并返回到 Visual Studio for Mac。

有关使用情节提要的详细信息,请参阅你好,tvOS 快速入门指南

使用拆分视图控制器

如上所述,在向用户显示筛选内容的情况下,通常会使用拆分视图控制器。 主要类别显示在主视图的左侧,以及基于用户选择的详细信息视图中右侧筛选的结果。

访问母版和详细信息

如果需要以编程方式访问主视图控制器和详细信息视图控制器,请使用拆分视图控制器的 ViewControllers 属性。 例如:

// Gain access to master and detail view controllers
var masterController = ViewControllers [0] as MasterViewController;
var detailController = ViewControllers [1] as DetailViewController;

它显示为数组,其中主视图控制器中的第一个元素 (0) 和第二个元素 (1) 是“详细信息”。

从“主”访问详细信息

由于通常根据主控形状中的用户选择在详细信息视图中显示详细信息,因此需要一种方法才能从主控形状访问详细信息。

执行此操作的最简单方法是公开主视图控制器类上的属性,例如:

public DetailViewController DetailController { get; set;}

在拆分视图控制器中,重写 ViewDidLoad 方法并将两个视图绑定在一起。 例如:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    // Gain access to master and detail view controllers
    var masterController = ViewControllers [0] as MasterViewController;
    var detailController = ViewControllers [1] as DetailViewController;

    // Wire-up views
    masterController.SplitViewController = this;
    masterController.DetailController = detailController;
    detailController.SplitViewController = this;
}

可以在详细信息视图控制器上公开属性和方法,主服务器可以使用该控制器根据需要显示新数据。

显示和隐藏主控形状

另外,可以使用拆分视图控制器的 PreferredDisplayMode 属性显示和隐藏主视图控制器。 例如:

// Show hide split view
if (SplitViewController.DisplayMode == UISplitViewControllerDisplayMode.PrimaryHidden) {
    SplitViewController.PreferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible;
} else {
    SplitViewController.PreferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryHidden;
}

UISplitViewControllerDisplayMode 枚举定义主视图控制器的显示方式,如下所示之一:

  • Automatic - tvOS 将控制主视图和详细信息视图的呈现。
  • PrimaryHidden - 这会隐藏主视图控制器。
  • AllVisible - 并排显示主视图控制器和详细信息视图控制器。 这是正常的默认演示文稿。
  • PrimaryOverlay - 详细信息视图控制器扩展,由“主”涵盖。

若要获取当前演示文稿状态,请使用拆分视图控制器的 DisplayMode 属性。

总结

本文介绍了在 Xamarin.tvOS 应用中设计和使用拆分视图控制器。