【问题标题】:SwiftUI TextField Representable not increasing Font SizeSwiftUI TextField Representable 不增加字体大小
【发布时间】: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)

【问题讨论】:

    标签: swift macos swiftui


    【解决方案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
    • 非常感谢!工作完美。大错特错,谢谢!!
    猜你喜欢
    • 2020-09-16
    • 2013-03-02
    • 1970-01-01
    • 2018-07-16
    • 2015-02-01
    • 1970-01-01
    • 2023-03-10
    • 2018-04-18
    • 2018-12-12
    相关资源
    最近更新 更多