Как использовать inputView с текстовым полем SwiftUI?

Итак, я начал изучать Swift и принял решение написать свое первое приложение с использованием SwiftUI. Я хотел бы использовать настраиваемую клавиатуру в приложении (другое представление SwiftUI), чтобы упростить использование моего приложения. Но я не могу понять, как это сделать, так как я новичок и изо всех сил пытаюсь найти примеры в Интернете.

Информация, которую я нашел, предлагает использовать UIViewRepresentable для импорта UITextField в мой проект - и, хотя я могу это сделать, я не могу понять, как передать ему представление SwiftUI для использования в качестве inputView.

Любая помощь будет принята с благодарностью - и если кто-то может предоставить подробный пример кода, это действительно поможет.

Мой код ниже, если он помогает ...

Представления SwiftUI в ContentView.swift

struct SecondView: View {
    var body: some View {
        VStack {
            CustomTextField(defaultText: "ENTER PLACEHOLDER TEXT HERE")
        }
    }
}

// This is the view I would like to use as the inputView for the text field
struct KeyPad: View {
    @State var selectedKeyPad: [row]
    @State var screenDivider: CGFloat

    var body: some View {
    <code omitted for brevity>
    }
}

Моя попытка интеграции с UIKit - хранится в отдельном быстром файле

import SwiftUI
import UIKit

class KeyboardViewController: UIInputViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let vc = UIHostingController(rootView: KeyPad(selectedKeyPad: keyPad4, screenDivider: 2))
        addChild(vc)
        self.view.addSubview(vc.view)
        vc.view.translatesAutoresizingMaskIntoConstraints = false
        vc.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        vc.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        vc.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        vc.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    }
}

class MyCustomTextField : UITextField, UITextFieldDelegate {
    override var inputViewController: UIInputViewController {
        get {
            return KeyboardViewController()
        }
    }
}

struct CustomTextField: UIViewRepresentable {
    var defaultText: String

    func makeUIView(context: Context) -> MyCustomTextField {
        let customTextField = MyCustomTextField()
        customTextField.placeholder = defaultText
        customTextField.textAlignment = .center
        return customTextField
    }

    func updateUIView(_ uiView: MyCustomTextField, context: Context) {
    }
}

person naz    schedule 14.06.2020    source источник
comment
Разве вы не можете просто использовать / создать расширение клавиатуры?   -  person Muhand Jumah    schedule 15.06.2020
comment
На самом деле я не собираюсь делать клавиатуру доступной для всей системы - я думал, что это будет более хлопотно   -  person naz    schedule 15.06.2020
comment
У меня есть ответ на этот вопрос: stackoverflow.com/questions/57975634/   -  person Meo Flute    schedule 26.01.2021