Примените ViewModifier к UIViewRepresentable

Я создал UIViewRespresentable для UITextField. Я хочу применить модификаторы:

myTextField.font(.headline).keyboardType(keyboardType)

Это не работает, даже если мой UIViewRepresentable прост:

class MyTextField: UITextField { ... }

struct MyFieldField: UIViewRepresentable {
    private let field = MyTextField()
    func makeUIView(context: Context) -> MyTextField { return field }
    func updateUIView(_ uiView: MyTextField, context: Context) {
        ...
    }
}

1 ответ

Решение

UITextFieldэто компонент UIKit, а не компонент SwiftUI. В настоящее время не уважает.font()или любые другие модификаторы SwiftUI. Кроме того, вы не можете себе создатьUIFont из SwiftUI Font. Итак, хотя вы можете сделать@Environment(\.font) var font: Font чтобы получить текущее значение, вы не сможете сделать с ним ничего полезного на земле UIKit.

Вы можете:

  1. Просто установите UIFont прямо на вашем UIViewRepresentable
  2. Использовать UIFont.TextStyle
  3. Карта между Font.TextStyle а также UIFont.TextStyle

Для любого из них вам нужно будет явно создать переменную на вашем UIViewRepresentable сохранить это значение, а затем применить его во время updateUIView(context:)

struct MyFieldField: UIViewRepresentable {
  // Your three options
  var myUIFont: UIFont
  var myUITextStyle: UIFont.TextStyle
  var mySwiftUITextStyle: Font.TextStyle // map this onto UIFont.TextStyle
  ...
}
Другие вопросы по тегам