Установка TextField Delegate для другого класса из ViewController в Swift не работает - PullRequest
0 голосов
/ 13 сентября 2018

Теперь в viewController я установил делегат текстового поля в класс TextFieldDelegateViewController, который я определил для обработки методов делегата текстового поля. Экземпляр viewController проходит через замыкание как слабый.

@IBOutlet weak var numberOfCreatures: UITextField!
{
    didSet{
        if let selectedIndex = delegate?.getSelectedIndexPath(){

            numberOfCreatures.delegate = TextFieldDelegateViewController(){
                weak var edit = self
                return edit!
            }

        }

    }
}

Вот мой TextFieldDelegateViewController класс

class TextFieldDelegateViewController: NSObject, UITextFieldDelegate {


weak var editDetailsViewController:EditDetailsViewController?

init(closure: () -> EditDetailsViewController?) {
    self.editDetailsViewController = closure()

    print("Init... \(self.editDetailsViewController)")
}




func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    print("Writing.....")
    if textField.tag == 1{
        return handleEditingDescriptionField(with: string, shouldChangeCharactersIn: range)

    }else{
        return handleEmptyNumberOfCreaturesTextField(with: string)
    }

}

}

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

1 Ответ

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

В следующем коде вы неявно создаете локальную переменную и присваиваете ее делегату:

numberOfCreatures.delegate = TextFieldDelegateViewController(){
                weak var edit = self
                return edit!
            }

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

@IBOutlet weak var numberOfCreatures: UITextField!
{
    didSet{
        if let selectedIndex = delegate?.getSelectedIndexPath(){
            textFieldDelegateController = TextFieldDelegateViewController(){
                weak var edit = self
                return edit!
            }
            numberOfCreatures.delegate = textFieldDelegateController
        }

    }
}

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