Итак, я начал изучать 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) {
}
}