Swiftui 将ViewModifier应用于UIViewRepresentable

Swiftui 将ViewModifier应用于UIViewRepresentable,swiftui,uiviewrepresentable,Swiftui,Uiviewrepresentable,我为UITextField创建了UIViewRespresentable。我想应用修饰符: myTextField.font(.headline).keyboardType(keyboardType) 即使我的UIViewRepresentable很简单,这也不起作用: class MyTextField: UITextField { ... } struct MyFieldField: UIViewRepresentable { private let field = MyText

我为UITextField创建了UIViewRespresentable。我想应用修饰符:

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) {
        ...
    }
}

UITextField
是UIKit组件,而不是SwiftUI组件。它当前不支持
.font()
或任何其他SwiftUI修饰符。此外,您还可以从SwiftUI
Font
创建一个
UIFont
。因此,尽管您可以使用
@Environment(\.font)var font:font
获取当前值,但在UIKit land中,您将无法使用它做任何有用的事情

你可以:

  • 只需直接在
    UIViewRepresentable
  • 使用
    UIFont.TextStyle
  • Font.TextStyle
    UIFont.TextStyle
  • 使用其中任何一种方法,您都需要在
    UIViewRepresentable
    上显式创建一个变量来保存该值,然后在
    updateUIView(上下文:)

    struct MyFieldField:UIViewRepresentable{
    //你的三个选择
    var myUIFont:UIFont
    var myUITextStyle:UIFont.TextStyle
    var mySwiftUITextStyle:Font.TextStyle//将此映射到UIFont.TextStyle
    ...
    }
    
    谢谢。我希望有一种方法可以让MyTextField获得修饰符并遍历它们,然后将它们应用到底层的UITextField(如您所指出的那样映射它们)。