Невозможно закрыть KeyBoard, когда кнопка «Готово» нажата в UITableViewCell - PullRequest
0 голосов
/ 13 сентября 2018

Во-первых, готовые коды кнопок ниже

class ViewController: UIViewController, UITextFieldDelegate {
    let inputNumber = UITextField(frame: CGRect(x: 150.0, y: 100.0, width: 200.0, height: 50.0))
    let toolBarKeyBoard = UIToolbar()
    let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed))
    var result : String!

override func viewDidLoad() {
    super.viewDidLoad()


    calculatePrice()

}


func calculatePrice () {

    priceInputLabel.keyboardType = .numberPad
    priceInputLabel.clearButtonMode = .whileEditing

    self.view.addSubview(priceInputLabel)

    toolBarKeyBoard.sizeToFit()

    toolBarKeyBoard.setItems([flexibleSpace, doneButton], animated: false)

    priceInputLabel.inputAccessoryView = toolBarKeyBoard

}

@objc func donePressed() {
        view.endEditing(true)

    }
}

Работает нормально. Когда я нажимаю «inputNumber (UITextField)», появляется клавиатура. И когда я ввожу номер и нажимаю кнопку «Готово», клавиатура закрывается. Хорошо.

Но в других кодах внизу не работает.

class FruitTableViewCell: UITableViewCell, UITextFieldDelegate {

var fruitsTextField = UITextField()
let toolBarKeyBoard = UIToolbar()
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed))
var result : String!


override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    self.contentView.addSubview(fruitsTextField)

}

override func layoutSubviews() {
    super.layoutSubviews()
    fruitsTextField.frame = CGRect(x: 250, y: 7.5, width: 100, height: 30)
    fruitsTextField.textColor = UIColor(red: CGFloat(242/255.0), green: CGFloat(56/255.0), blue: CGFloat(90/255.0), alpha: 1.0)
    fruitsTextField.keyboardType = .numberPad
    fruitsTextField.clearButtonMode = .whileEditing

    toolBarKeyBoard.sizeToFit()

    fruitsTextField.inputAccessoryView = toolBarKeyBoard

    toolBarKeyBoard.setItems([flexibleSpace, doneButton], animated: false)


}


@objc func donePressed() {
    fruitTextField.endEditing(true)
    }

Я могу построить, я могу переключать клавиатуру, я могу касаться кнопки «Готово», но клавиатура не сбрасывается. Я думаю, что функция '@objc func donePressed ()' в нижней строке имеет значение.

Первые коды: «view.endEditing (true)», но это «fruitTextField.endEditing (true)»

Итак, я попытался изменить коды.

@objc func donePressed() {
    contentView.endEditing(true)
    }

Но не работает.

Question1. Как я могу отклонить клавиатуру?

Вопрос2. Почему клавиатура не отключается, даже если я коснулся кнопки «Готово»?

Question3. Во втором коде клавиатура не является FirstResponder?

Вопрос4. Во втором коде, что такое представление для .endEditing?

Спасибо!

1 Ответ

0 голосов
/ 13 сентября 2018

Измените инициализацию "Готово" на:

lazy var doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed))

Вам нужно target: self, и оно должно быть lazy, чтобы self был действителен при создании экземпляра кнопки.

Вы также можете изменить свою готовую функцию на:

@objc func donePressed() {
    fruitsTextField.resignFirstResponder()
}

Действительно не меняет функциональность, но я считаю, что это рекомендуемый метод.

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