Примените 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.
Вы можете:
- Просто установите
UIFont
прямо на вашемUIViewRepresentable
- Использовать
UIFont.TextStyle
- Карта между
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
...
}