当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Optional focusSection()用法及代码示例


实例方法

focusSection()

指示应使用视图的框架和可聚焦后代队列来指导焦点移动。

声明

func focusSection() -> some View

返回值

可以将焦点引导到其可聚焦后代的视图。

详述

当用户在视图之间移动焦点时,使用焦点部分自定义 SwiftUI 的行为。

以下 tvOS 示例在屏幕左上方放置了三个按钮(“1”、“2” 和 “3”),在右下角放置了三个按钮(“A”、“B” 和 “C”)。默认情况下,在 Siri Remote 上的 “1” - “3” 组中的任何按钮上向右滑动都不会执行任何操作,因为焦点系统直接在其右侧找不到可聚焦的视图。但是通过将包含按钮“A” - “C” 的VStack 声明为焦点部分,VStack 可以接收焦点,并将焦点传递给它的第一个可聚焦子项(按钮“A”)。该示例在VStack 上放置了一个边框来说明这种空间排列。


var body: some View {
    HStack {
        VStack {
            Button ("1") {}
            Button ("2") {}
            Button ("3") {}
            Spacer()
        }
        .border(Color.white, width: 2)


        Spacer()
        VStack {
            Spacer()
            Button ("A") {}
            Button ("B") {}
            Button ("C") {}
        }
        .border(Color.white, width: 2)
        .focusSection()
    }
}

请注意,因为包含按钮 “1” - “3” 的 VStack 并未将自身声明为焦点部分,因此无法将焦点从按钮 “A” - “C” 直接返回到左侧。这些按钮都没有可聚焦的视图——在这种情况下,或者是按钮,或者是带有focusSection() 修饰符的VStack——直接位于其左侧。

将此修改器应用于视图会根据移动样式影响焦点行为:

  • 定向运动:使用 Siri Remote 手势、键盘上的箭头键或任何其他根据基本方向(上、下、左、右)起作用的输入类型进行导航会产生定向运动。当使用 focusSection() 进行修改时,视图的框架变得能够接受焦点,以便将其定向到其在行进方向上最近的可聚焦后代。在前面的示例中,将 right-side VStack 声明为焦点部分允许它从左侧的按钮接收 right-directed 焦点。

  • 顺序移动:使用数字表冠、键盘上的 Tab 键或任何其他类型的输入(根据顺序中的下一个或前一个项目起作用)会产生顺序移动。当您使用 focusSection() 修饰符时,SwiftUI 会偏离其默认的基于布局的序列,在恢复默认序列之前访问每个已修改视图的可聚焦后代。在可聚焦的后代集合中,SwiftUI 继续按布局顺序(leading-to-trailing,从上到下)访问视图。

focusSection() 不影响修改后视图的可聚焦性。如果修改后的视图没有可聚焦的后代,那么修改器什么也不做。

可用版本

macOS 13.0+ Beta, tvOS 15.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional focusSection()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。