Как я могу добавить текст в активный UITextField - Swift - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь сделать собственную клавиатуру.Но я не могу ввести информацию об активном textField.Я не уверен, что я делаю неправильно.

PS: клавиатура находится в другом ViewController и хорошо передает тег sender.tag.

Вот мой код:

import UIKit

class HomeVC: UIViewController, ButtonTapDelegate, UITextFieldDelegate {

@IBOutlet var textField1: UITextField!
@IBOutlet var textField2: UITextField!
@IBOutlet var keyboardView: UIView!

var activeField: UITextField?
var delegate: ButtonTapDelegate!

override func viewDidLoad() {
    addKeyboard(view: keyboardView)
    textField1.inputView = UIView()
    textField2.inputView = UIView()
    textField1.becomeFirstResponder()
    activeField?.delegate = self
}

func textFieldDidBeginEditing(_ textField: UITextField) {
    activeField = textField
}
func addKeyboard(view: UIView) {
    let keyboard = KeyboardVC(nibName: "KeyboardVC", bundle: nil)
    keyboard.delegate = self
    view.addSubview(keyboard.view)
    addChild(keyboard)
}

func didTapButton(sender: UIButton) {
    if sender.tag == 8 {
        activeField?.text?.append(contentsOf: " ")
    } else if sender.tag == 9 {
        activeField?.text?.removeAll()
    } else {
        let val = sender.titleLabel?.text
        activeField?.text?.append(contentsOf: val!)
    }
}
}

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Я смог исправить это после некоторых исследований с изменениями функций textFieldDidBeginEditing и didTapButton : вот полный код, если кто-то хочет выбрать один textField за раз сПользовательская клавиатура:


import UIKit

class HomeVC: UIViewController, ButtonTapDelegate, UITextFieldDelegate {

@IBOutlet var textField1: UITextField!
@IBOutlet var textField2: UITextField!
@IBOutlet var keyboardView: UIView!

var activeField: UITextField?
var delegate: ButtonTapDelegate!

override func viewDidLoad() {
    addKeyboard(view: keyboardView)
    textField1.inputView = UIView()
    textField2.inputView = UIView()
    textField1.becomeFirstResponder()
    activeField?.delegate = self
}

func textFieldDidBeginEditing(_ textField: UITextField) {
   self.activeField = textField
}

func addKeyboard(view: UIView) {
    let keyboard = KeyboardVC(nibName: "KeyboardVC", bundle: nil)
    keyboard.delegate = self
    view.addSubview(keyboard.view)
    addChild(keyboard)
}

func didTapButton(sender: UIButton) {
        if textField1 == self.activeField {
            if sender.tag == 8 {
                textField1.text?.append(contentsOf: " ")
            } else if sender.tag == 9 {
                textField1.text?.removeAll()
            } else {
                let val = sender.titleLabel?.text?
                textField1.text?.append(contentsOf: val!)
            }
            return;
        }

    if textField2 == self.activeField {
        if sender.tag == 8 {
            textField2.text?.append(contentsOf: " ")
        } else if sender.tag == 9 {
            textField2.text?.removeAll()
        } else {
            let val = sender.titleLabel?.text?
            textField2.text?.append(contentsOf: val!)
        }
        return;
    }
}
}
0 голосов
/ 27 ноября 2018

В вашем коде есть небольшая проблема, которая вызывает вашу проблему.В комментариях вы упомянули, что didTapButton() называется до textFieldDidBeginEditing.Это означает, что actionField не присвоено значение и, следовательно, оно равно нулю.Ваш код в didTapButton() безопасно разворачивает необязательное значение, чтобы не возникало ошибок, но, конечно, вы не можете добавить текст к несуществующему UITextField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...