Пользовательская клавиатура сбивает приложение - Swift - PullRequest
0 голосов
/ 26 ноября 2018

Я делаю тест пользовательской клавиатуры.Вот что мне нужно:

  1. У него должно быть два поля UITextField.Не может быть надписью.
  2. Клавиатура является встроенным UIView.
  3. Клавиатуру по умолчанию следует отключить.
  4. Она не может быть расширением клавиатуры.

Не уверен, почему приложение падает.PS: еще не все ключи в коде.Вот изображение того, что я пытаюсь сделать, и двух контроллеров представления.

Редактировать: Ошибка: Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

enter image description here

Первый контроллер View:

import UIKit

class HomeVC: UIViewController, ButtonTapDelegate {

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

var buttonPressed = [String]()

override func viewDidLoad() {
    addKeyboard(view: keyboardView)
    buttonPressed = [String]()
    textField1.inputView = UIView()
    textField2.inputView = UIView()
}

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

func didTapButton(sender: UIButton) {
    if sender.tag == 5 {
        textField1.text?.append(contentsOf: " ")
    } else if sender.tag == 6 {
        textField1.text?.removeAll()
         buttonPressed = [String]()
    } else {
        let val = sender.titleLabel?.text
        textField1.text?.append(contentsOf: val!)
    }
    self.textField1.text = buttonPressed.joined(separator: "")
}
}

Вот второй контроллер View:

import UIKit

protocol ButtonTapDelegate {
    func didTapButton(sender: UIButton)
}

class KeyboardVC: UIViewController {

var delegate: ButtonTapDelegate!

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func buttons(_ sender: UIButton) {
    delegate.didTapButton(sender: sender)
    print(sender)
}
}

enter image description here

1 Ответ

0 голосов
/ 26 ноября 2018
var delegate: ButtonTapDelegate!

Неявно развернутый необязательный параметр - это, по сути, обещание, что вы определенно передадите переменной значение, прежде чем пытаться получить к ней доступ.Проблема в этом случае в том, что вы этого не сделали.Скорее всего, вы хотите сделать это в вашем первом контроллере представления:

func addKeyboard(view: UIView) {
    let keyboard = KeyboardVC(nibName: "KeyboardVC", bundle: nil)
    keyboard.delegate = self // Now "delegate" will have a value before the function gets called
    view.addSubview(keyboard.view)
    addChild(keyboard)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...