在 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 设计用户界面

使用类的 UIButton 实例在 tvOS 窗口中创建可聚焦的可选择按钮。 当用户选择按钮时,它会向目标对象发送操作消息,使 Xamarin.tvOS 应用能够响应用户的输入。

Example buttons

有关使用 Focus 和使用 Siri 远程导航的详细信息,请参阅我们的“使用导航”和“焦点”和“Siri 远程”以及“蓝牙控制器”文档。

关于按钮

在 tvOS 中,按钮用于特定于应用的操作,并且可能包含标题、图标或两者。 当用户使用 Siri 远程导航应用的用户界面时,焦点会转移到给定的按钮,以便更改文本和背景颜色。 阴影还应用于按钮,添加 3D 效果,使其似乎高于用户界面的其余部分。

Example buttons

Apple 有以下使用按钮的建议:

  • 使用标题或图标 - 虽然图标和标题都可以包含在按钮中,但空间有限,因此尽量不要合并这两者。
  • 清楚地标记破坏性按钮 - 如果按钮执行破坏性操作(如删除文件),请清楚地将其标记为使用文本和/或图标。 破坏性操作应始终显示一个 警报 ,要求用户限制该操作。
  • 请勿使用后退按钮 - Siri 远程上的菜单按钮用于返回到上一个屏幕。 此规则的一个例外是应用内购买或破坏性操作,其中 应显示“取消” 按钮。

有关使用焦点和导航的详细信息,请参阅我们的 “使用导航”和“焦点” 文档。

按钮图标

Apple 建议为按钮图标使用简单且高度可识别的图像。 过于复杂的图标很难在沙发上房间的电视屏幕上识别出来,因此,请尝试使用最简单的表示形式来了解这一点。 尽可能对图标使用标准、众所周知的图像(如放大镜)进行搜索。

按钮标题

为按钮创建游戏时,Apple 具有以下建议:

  • 在图标按钮 下方显示描述性文本 - 尽可能将清晰的描述性文本放在图标下方,以便进一步获取按钮的用途。
  • 对标题 使用谓词或谓词短语 - 清楚地说明当用户单击按钮时将执行的操作。
  • 使用标题样式大写 - 除了文章、连词或介词(四个字母或更少),按钮标题的每个单词都应大写。
  • 使用短到点标题 - 使用最短的可能谓词来描述按钮的操作。

按钮和情节提要

使用 Xamarin.tvOS 应用中的按钮的最简单方法是使用适用于 iOS 的 Xamarin Designer 将它们添加到应用的 UI。

  1. 解决方案资源管理器中,双击Main.storyboard该文件并打开该文件进行编辑。

  2. 库中拖动按钮并将其拖放到视图上:

    A button

  3. “属性资源管理器”中,可以调整按钮的多个属性,例如“ 标题 ”和 “文本颜色”:

    Button properties

  4. 接下来,切换到“事件”选项卡,并从按钮连接事件并调用它ButtonPressed

    The Events Tab

  5. 将自动切换到 ViewController.cs 视图,可在其中使用 向上 键和 向下 键将新操作放置在代码中:

    Placing a new Action in code

  6. 按 Enter 选择位置:

    The code editor

  7. 保存对所有文件的更改。

只要按钮 Enabled 的属性不受 true 其他控件或视图覆盖,就可以使用 Siri Remote 将其设为焦点项。 如果用户选择按钮并单击 Touch Surface, ButtonPressed 将执行上面定义的操作。

重要

虽然可以分配诸如创建事件处理程序时的操作TouchUpInsideUIButton,但永远不会调用它,因为 Apple TV 没有触摸屏或支持触摸事件。 创建 tvOS 用户界面元素的操作时,应始终使用默认操作类型

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

按钮和代码

(可选)可以在 C# 代码中创建 a UIButton ,并将其添加到 tvOS 应用的视图中。 例如:

var button = new UIButton(UIButtonType.System);
button.Frame = new CGRect (25, 25, 300, 150);
button.SetTitle ("Hello", UIControlState.Normal);
button.AllEvents += (sender, e) => {
    // Do something when the button is clicked
    ...
};
View.AddSubview (button);

在代码中创建新的 UIButton 代码时,请将其 UIButtonType 指定为以下项之一:

  • 系统 - 这是 tvOS 提供的标准按钮类型,是最常使用的按钮类型。
  • DetailDisclosure - 显示用于隐藏或显示详细信息的“关闭”类型的按钮。
  • InfoDark - 深色详细信息按钮在圆形中显示“i”。
  • InfoLight - 浅色详细信息按钮在圆形中显示“i”。
  • AddContact - 将按钮显示为“添加联系人”按钮。
  • 自定义 - 允许自定义按钮的多个特征。

接下来,定义按钮的屏幕大小和位置。 示例:

button.Frame = new CGRect (25, 25, 300, 150);

然后,设置按钮的标题。 UIButtons 与大多数 UIKit 控件不同的是,它们具有一个状态,因此你不能只是更改标题,你必须为给定 UIControlState更改它。 例如:

button.SetTitle ("Hello", UIControlState.Normal);

接下来,使用 AllEvents 事件查看用户何时单击该按钮。 示例:

button.AllEvents += (sender, e) => {
    // Do something when the button is clicked
    ...
};

最后,将按钮添加到视图以显示它:

View.AddSubview (button);

重要

虽然可以分配诸如操作UIButton的操作TouchUpInside,但永远不会调用它,因为 Apple TV 没有触摸屏或支持触摸事件。 应始终使用 AllEventsPrimaryActionTriggered事件。

设置按钮的样式

tvOS 提供了多个属性 UIButton ,可用于提供其标题和样式,其背景色和图像等内容。

按钮标题

如上所述, UIButtons 与大多数 UIKit 控件不同的是,它们具有一个状态,因此你不能只是更改标题,你必须为给定 UIControlState更改它。 例如:

button.SetTitle ("Hello", UIControlState.Normal);

可以使用该方法设置按钮 SetTitleColor 的标题颜色。 例如:

button.SetTitleColor (UIColor.White, UIControlState.Normal);

可以使用 SetTitleShadowColor.. 例如:

button.SetTitleShadowColor(UIColor.Black, UIControlState.Normal);

可以使用以下代码将标题阴影设置为从“雕刻”更改为“浮雕”:

button.ReverseTitleShadowWhenHighlighted = true;

此外,还可以使用属性化文本作为按钮的标题。 例如:

var normalAttributedTitle = new NSAttributedString (buttonTitle, foregroundColor: UIColor.Blue, strikethroughStyle: NSUnderlineStyle.Single);
myButton.SetAttributedTitle (normalAttributedTitle, UIControlState.Normal);

var highlightedAttributedTitle = new NSAttributedString (buttonTitle, foregroundColor: UIColor.Green, strikethroughStyle: NSUnderlineStyle.Thick);
myButton.SetAttributedTitle (highlightedAttributedTitle, UIControlState.Highlighted);

按钮图像

UIButton 个图像可以附加到它,并可以使用图像作为其背景。

若要为给定 UIControlState按钮设置背景图像,请使用以下代码:

button.SetBackgroundImage(UIImage.FromFile("my image.png"), UIControlState.Normal);

AdjustsImageWhenHiglighted 属性设置为 true 在突出显示按钮时绘制较轻的图像(这是默认值)。 将 AdjustsImageWhenDisabled 属性设置为 true 在禁用按钮时绘制图像变暗(同样,这是默认值)。

若要设置按钮上显示的图像,请使用以下代码:

button.SetImage(UIImage.FromFile("my image.png"), UIControlState.Normal);

使用该 TintColor 属性设置应用于标题和按钮图像的颜色色调。 对于类型的按钮 Custom ,此属性不起作用,必须自行实现 TintColor 该行为。

总结

本文介绍了在 Xamarin.tvOS 应用中设计和处理按钮。 它演示了如何使用 iOS 设计器中的按钮以及如何在 C# 代码中创建按钮。 最后,它演示了如何修改按钮的标题并更改其样式和外观。