Я использую представительный ViewController для пользовательского NSTextField
в SwiftUI для MacOS. Я применяю индивидуальный увеличенный размер шрифта для этого TextField. Это отлично работает, у меня был вопрос относительно этого topi c в моем последнем вопросе здесь .
Теперь я устанавливаю шрифт TextField в моем viewDidAppear()
методе, который работает хорошо. Я вижу шрифт побольше. Проблема в том, что теперь, когда мой взгляд не в фокусе, размер текста уменьшается до нормального. Когда я go возвращаюсь и снова активирую окно, я вижу маленький размер шрифта. Когда я снова набираю текст, он обновляется, и я вижу правильный размер шрифта.
Это мой код, который я использую:
class AddTextFieldController: NSViewController {
@Binding var text: String
let textField = NSTextField()
var isFirstResponder : Bool = true
init(text: Binding<String>, isFirstResponder : Bool = true) {
self._text = text
textField.font = NSFont.userFont(ofSize: 16.5)
super.init(nibName: nil, bundle: nil)
NSLog("init")
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadView() {
textField.delegate = self
//textField.font = NSFont.userFont(ofSize: 16.5)
self.view = textField
}
override func viewDidAppear() {
self.view.window?.makeFirstResponder(self.view)
textField.font = NSFont.userFont(ofSize: 16.5)
}
}
extension AddTextFieldController: NSTextFieldDelegate {
func controlTextDidChange(_ obj: Notification) {
if let textField = obj.object as? NSTextField {
self.text = textField.stringValue
}
textField.font = NSFont.userFont(ofSize: 16.5)
}
}
И это представимое:
struct AddTextFieldRepresentable: NSViewControllerRepresentable {
@Binding var text: String
func makeNSViewController(
context: NSViewControllerRepresentableContext<AddTextFieldRepresentable>
) -> AddTextFieldController {
return AddTextFieldController(text: $text)
}
func updateNSViewController(
_ nsViewController: AddTextFieldController,
context: NSViewControllerRepresentableContext<AddTextFieldRepresentable>
) {
}
}
Вот демонстрация:
Я думал об использовании уведомлений, когда представление возвращается, но не уверен
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: NSApplication.willBecomeActiveNotification, object: nil)