Как срабатывает действие iOS пользовательских кнопок клавиатуры? - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь сделать собственное расширение клавиатуры. Кнопки клавиатуры хорошо отображаются, но никаких действий не происходит! Вот интерфейс кнопок:

struct MyKeyButtons: View {

    let data: [String] = ["A", "B", "C"]
    var body: some View {
        HStack {
            ForEach(data, id: \.self) { aData in

                Button(action: {
                    KeyboardViewController().keyPressed()

                }) {
                    Text(aData)
                        .fontWeight(.bold)
                        .font(.title)
                        .foregroundColor(.purple)
                        .padding()
                        .border(Color.purple, width: 5)
                }
            }
        }
    }
}

Код KeyboardViewController здесь:

import SwiftUI

class KeyboardViewController: UIInputViewController {

    @IBOutlet var nextKeyboardButton: UIButton!

    override func updateViewConstraints() {
        super.updateViewConstraints()

        // Add custom view sizing constraints here
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let child = UIHostingController(rootView: MyKeyButtons())
         //that's wrong, it must be true to make flexible constraints work
        // child.translatesAutoresizingMaskIntoConstraints = false
         child.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
         view.addSubview(child.view)
         addChild(child)//not sure what is this for, it works without it.

        // Perform custom UI setup here
        self.nextKeyboardButton = UIButton(type: .system)

        self.nextKeyboardButton.setTitle(NSLocalizedString("Next Keyboard", comment: "Title for 'Next Keyboard' button"), for: [])
        self.nextKeyboardButton.sizeToFit()
        self.nextKeyboardButton.translatesAutoresizingMaskIntoConstraints = false

        self.nextKeyboardButton.addTarget(self, action: #selector(handleInputModeList(from:with:)), for: .allTouchEvents)

        self.view.addSubview(self.nextKeyboardButton)

        self.nextKeyboardButton.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
        self.nextKeyboardButton.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
    }

    override func viewWillLayoutSubviews() {
        self.nextKeyboardButton.isHidden = !self.needsInputModeSwitchKey
        super.viewWillLayoutSubviews()
    }

    override func textWillChange(_ textInput: UITextInput?) {
        // The app is about to change the document's contents. Perform any preparation here.
    }

    override func textDidChange(_ textInput: UITextInput?) {
        // The app has just changed the document's contents, the document context has been updated.

        var textColor: UIColor
        let proxy = self.textDocumentProxy
        if proxy.keyboardAppearance == UIKeyboardAppearance.dark {
            textColor = UIColor.white
        } else {
            textColor = UIColor.black
        }
        self.nextKeyboardButton.setTitleColor(textColor, for: [])
    }


    //==================================
    func keyPressed() {
          print("test--- clicked! ")
          //textDocumentProxy.insertText("a")
          (textDocumentProxy as UIKeyInput).insertText("a")
      }

}

Для получения дополнительной информации см. Проект GitHub: https://github.com/ask2asim/KeyboardTest1

...