Swift: настройка делегатов - PullRequest
2 голосов
/ 30 апреля 2020

Я думаю, что у меня возникло недоразумение с делегатами по-быстрому. Я пытаюсь программно добавить textField в мой контроллер. Поэтому я отредактировал свой класс, как показано ниже:

class HomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout, UITextFieldDelegate {
}

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

Невозможно присвоить значение типа '(HomeController) -> () -> HomeController' для типа 'UITextFieldDelegate?'

Поэтому я хотел знаете, как я могу установить делегат моего TextField для UITextFieldDelegate?

Мой класс выглядит следующим образом:

 class HomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout, UITextFieldDelegate {
  let sampleTextField: UITextField = {
    let textField = UITextField(frame: CGRect(x: 20, y: 100, width: 300, height: 40))
    textField.placeholder = "Enter text here"
    textField.font = UIFont.systemFont(ofSize: 15)
    textField.borderStyle = UITextField.BorderStyle.roundedRect
    textField.autocorrectionType = UITextAutocorrectionType.no
    textField.keyboardType = UIKeyboardType.default
    textField.returnKeyType = UIReturnKeyType.done
    textField.clearButtonMode = UITextField.ViewMode.whileEditing
    textField.contentVerticalAlignment = UIControl.ContentVerticalAlignment.center
    textField.delegate = self

    return textField
 }()
}

1 Ответ

2 голосов
/ 30 апреля 2020

Изменить:

let sampleTextField: UITextField = {

на:

lazy var sampleTextField: UITextField = {

Редактировать

Добавить уточнение ...

При объявлении свойства (переменной уровня класса) с помощью var или let оно создается немедленно и ничего не знает об остальной части класса.

Если вы используете lazy var, он не создается, пока не будет впервые использован ... в этот момент знает о классе и имеет доступ к self.

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