#swift #swiftui #watchkit #apple-watch #watchos
Вопрос:
Я хочу предоставить кнопку, которая включит цифровую заводную головку 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)
}
}