SwiftUI:通过焦点更改启用手表数字表冠

Posted

技术标签:

【中文标题】SwiftUI:通过焦点更改启用手表数字表冠【英文标题】:SwiftUI: enable watch digital crown via focus change 【发布时间】:2021-06-19 14:32:37 【问题描述】:

我想提供一个按钮来启用 Apple Watch 数字表冠进行输入。这涉及确保某些事情有重点,可以改变王冠。我有一个小测试器:

当您触摸“启用表冠”按钮时,我想开始更换表冠。

这是我创建的代码:

struct ContentView: View 
    @State var crownValue = 0.0
    @Namespace private var namespace
    @Environment(\.resetFocus) var resetFocus
    @State var forceFocus = false
    
    var body: some View 
        ScrollView 
            VStack 
                Button("Button") 
                
                .focusable(forceFocus)
                .prefersDefaultFocus(true, in: namespace)
                Text("\(crownValue)")
            
            .digitalCrownRotation($crownValue)
            
            // Goal is for this button to give focus to other button and start capturing
            // digital crown changes; but have to touch this button twice to get desired
            // effect
            Button("Enable Crown") 
                print("Enabling crown")
                forceFocus = true
                resetFocus(in: namespace)
            
        
        .focusScope(namespace)
    

它有效,但前提是我触摸“启用皇冠”按钮两次!

知道如何实现我的目标吗?此示例的完整源代码位于https://github.com/t9mike/DigitalCrownHelp2。

【问题讨论】:

【参考方案1】:

我太复杂了。以下工作正常,将注意力集中在用于启用表冠功能的按钮上:

struct ContentView: View 
    @State var crownValue = 0.0
    
    var body: some View 
        ScrollView 
            Text("\(crownValue)")

            Button("Enable Crown") 
                print("Enabling crown")
            
            .focusable()
        
        .digitalCrownRotation($crownValue)
    

【讨论】:

以上是关于SwiftUI:通过焦点更改启用手表数字表冠的主要内容,如果未能解决你的问题,请参考以下文章

如何确定手表方向(即数字表冠在右侧还是左侧?)

我们可以使用 Apple Watch 2.0 模拟器推数字表冠吗?

如何响应 Apple Watch 的表冠滚动?

输入 SwiftUI 后更改文本字段的焦点

使用 SwiftUI 时在拆分视图上接收应用程序之间焦点更改的通知

如何在 SwiftUI 应用生命周期中更改状态栏样式?