SwiftUI TextField Representable not increasing Font Size

左心房为你撑大大i 提交于 2021-01-28 12:09:24

问题


I am using a representable View Controller in my SwiftUI app for Mac. As the default TextField is very limited in SwiftUI (FirstResponder, Placeholder color) I am using a representable.

It works fine, however I can not increase the Font Size of the TextField, which does work for the default TextField component for SwiftUI.

This is my 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
    }
  }
}

This is my Representable

struct TextFieldRepresentable: NSViewControllerRepresentable {

  @Binding var text: String

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

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

In this line, I am trying to change the Font of my TextField, however nothing is changing here.

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

回答1:


Assigning the font on viewDidAppear worked for me.

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


来源:https://stackoverflow.com/questions/62052205/swiftui-textfield-representable-not-increasing-font-size

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!