SwiftUI на MacOS: обнаружение изменения фокуса и принудительное изменение фокуса - PullRequest
1 голос
/ 03 мая 2020

Я хочу обнаружить Изменение фокуса и вызвать Изменение фокуса .
В этом простом примере я хочу определить, если пользователь щелкает мышью в одном из текстовых полей.
С другой стороны, я хочу, чтобы программно фокусировался с помощью кнопки.

struct ContentView: View {

  @State private var textA = ""
  @State private var textB = ""

  @State private var focusableA = false
  @State private var focusableB = false

    var body: some View {
      VStack{
        HStack{
          TextField("Field A", text: $textA)
          .focusable(focusableA, onFocusChange: {f in print ("FocusChange A \(f)")})
          TextField("Field V", text: $textB)
          .focusable(focusableB, onFocusChange: {f in print ("FocusChange B \(f)")})
        }
        HStack{
          Button(action: {self.focusableA = true; self.focusableB = false }) 
          {Text("Set Focus to A")}
          Button(action: {self.focusableB = true; self.focusableA = false }) 
          {Text("Set Focus to B")
          }
        }
    }
    .frame(maxWidth: .infinity, maxHeight: .infinity)
  }
}

Приведенный выше код не работает, как это можно сделать быть сделано.

1 Ответ

1 голос
/ 03 мая 2020

Я хочу определить, нажимает ли пользователь одно из текстовых полей.

Вот пример для этого

TextField("Title", text: boundText, onEditingChanged: { editing in
            if editing {
                print(">> start editing, got focus")
            } else {
                print(">> end editing, lost focus")
            }
        })

Я хочу поэтому установите фокусировку программно с помощью кнопки

Сам SwiftUI пока не предоставляет API для этого. .focusable дает возможность быть фокусируемым для видов, которые не являются таковыми по умолчанию (например, текст), но не имеют принудительно установленной фокусировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...