SwiftUI TextField Representable 不增加字体大小

Posted

技术标签:

【中文标题】SwiftUI TextField Representable 不增加字体大小【英文标题】:SwiftUI TextField Representable not increasing Font Size 【发布时间】:2020-05-27 20:22:11 【问题描述】:

我在 Mac 的 SwiftUI 应用程序中使用了可表示的视图控制器。由于 SwiftUI(FirstResponder,占位符颜色)中的默认 TextField 非常有限,因此我使用的是可表示的。

它工作正常,但是我无法增加 TextField 的字体大小,这对于 SwiftUI 的默认 TextField 组件确实有效。

这是我的 NSViewController:

class TextFieldController: NSViewController 

  @Binding var text: String
  var isFirstResponder : Bool = true

    init(text: Binding<String>, isFirstResponder : Bool = true) 
    self._text = text
    super.init(nibName: nil, bundle: nil)
  

  required init?(coder: NSCoder) 
    fatalError("init(coder:) has not been implemented")
  

  override func loadView() 

    let textField = NSTextField()
    textField.delegate = self

    textField.font = NSFont(name: "SF Compact Text", size: 19.5) // Points

    self.view = textField
  

  override func viewDidAppear() 
    self.view.window?.makeFirstResponder(self.view)
  



extension TextFieldController: NSTextFieldDelegate 

  func controlTextDidChange(_ obj: Notification) 
    if let textField = obj.object as? NSTextField 
      self.text = textField.stringValue
    
  

这是我的代表

struct TextFieldRepresentable: NSViewControllerRepresentable 

  @Binding var text: String

  func makeNSViewController(
    context: NSViewControllerRepresentableContext<TextFieldRepresentable>
  ) -> TextFieldController 
    return TextFieldController(text: $text)
  

  func updateNSViewController(
    _ nsViewController: TextFieldController,
    context: NSViewControllerRepresentableContext<TextFieldRepresentable>
  ) 
  

在这一行中,我正在尝试更改我的 TextField 的字体,但是这里没有任何变化。

textField.font = NSFont(name: "SF Compact Text", size: 19.5)

【问题讨论】:

【参考方案1】:

在 viewDidAppear 上分配字体对我有用。

class TextFieldController: NSViewController 
    @Binding var text: String
    let textField = NSTextField()
    var isFirstResponder : Bool = true

    init(text: Binding<String>, isFirstResponder : Bool = true) 
        self._text = text
        super.init(nibName: nil, bundle: nil)
    

    required init?(coder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

    override func loadView() 
        textField.delegate = self
        textField.stringValue = text
        self.view = textField
    

    override func viewDidAppear() 
        self.view.window?.makeFirstResponder(self.view)
        textField.font = NSFont(name: "SF Compact Text", size: 19.5)
    

【讨论】:

谢谢,您是否在外部声明了 textField 或者如何在 viewDidAppear() 内部访问它? 你应该在外面声明。 我试过它来声明它,我是否必须在 loadView() 中设置 self.view = self.textField ?那对我不起作用。问题是我将它用作视图,但在这里我需要再次将视图向下转换为 NSTextField 非常感谢!工作完美。大错特错,谢谢!!

以上是关于SwiftUI TextField Representable 不增加字体大小的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView 作为 SwiftUI 中 TextField() 的输入

如何防止 TextField 在 SwiftUI 列表中消失?

如何检测何时点击 TextField? (MacOS 上的 SwiftUI)

SwiftUI:提交后留在同一个 TextField 上?

SwiftUi 有没有办法在 TextField 中获取文本

在 SwiftUI 中设置 TextField 的宽度