将ViewModifier应用于UIViewRepresentable

我为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) {
        ...
    }
}
cricri 回答:将ViewModifier应用于UIViewRepresentable

UITextField是一个UIKit组件,而不是SwiftUI组件。它目前不支持.font()或任何其他SwiftUI修饰符。此外,您从SwiftUI UIFont cannot currently create Font。因此,尽管您可以执行@Environment(\.font) var font: Font来获取当前值,但在UIKit领域中您将无法执行任何有用的操作。

您可以:

  1. 只需直接在您的UIFont上设置一个UIViewRepresentable
  2. 使用UIFont.TextStyle
  3. Font.TextStyleUIFont.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
  ...
}
本文链接:https://www.f2er.com/3114290.html

大家都在问