Как назначить TextField Delegate и методы при создании многоразовых представлений - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь создать повторно используемый компонент пользовательского интерфейса в моем приложении, этот конкретный компонент содержит UITextFeild.Я успешно настроил текстовое поле в представлении, и оно отлично отображается, однако ... Настройка делегата текстовых полей не работает.

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

let sessionNameCell = ReusableComponents().createTextFieldCell()
sessionNameCell.textField.delegate = self

Но не могу ссылаться на текстовое поле из контроллера.

Я также пытался установитьделегировать несколько способов внутри функции, которая создает представление:

textField.delegate = self

и

textField.delegate = ViewController()

последний сбой приложения, как я понимаю, создание экземпляра объекта не являетсяподходящее решение

Полный код ...

Просмотр контроллера

class HostSessionSetupController : UITableViewController, UITextFieldDelegate {

private var sessionNameCell: UITableViewCell = ReusableComponents().createEditableTableRow(title: "Session Name", placeholder: "e.g. Marks birthday")

override func viewDidLoad() {
    super.viewDidLoad()

    sessionNameCell.textField.delegate = self

}

// The delegate method i need to run
func textFieldShouldReturn(_ textField: UITextField) -> Bool {

    textField.resignFirstResponder()

    if let input = textField.text {
        if input != ""{
            self.title = "Setup " + input
        } else {
            self.title = "Setup Session"
        }
    }
}

Просмотр функции

func createTableRow(title: String, accessoryType: UITableViewCell.AccessoryType = .none) -> UITableViewCell {
    let cell = UITableViewCell()
    cell.backgroundColor = .backgroundDarkBlack
    cell.textLabel?.textColor = .white
    cell.textLabel?.text = title
    cell.selectionStyle = .none
    cell.accessoryType = accessoryType

    return cell
}

func createEditableTableRow(title: String, placeholder: String) -> UITableViewCell{

    let cell = createTableRow(title: title)
    let textField = UITextField(frame: CGRect(x:  40, y: 0, width: cell.frame.width, height: cell.frame.height))

    textField.textColor = .white
    textField.attributedPlaceholder = NSAttributedString(string: placeholder, attributes: [NSAttributedString.Key.foregroundColor: UIColor.init(white: 1, alpha: 0.5)])
    textField.keyboardAppearance = .dark
    textField.returnKeyType = .default
    textField.textAlignment = .right

    cell.addSubview(textField)

    return cell

}

Единственная функциональность, которую я пробуюполучить от всего этого - спрятать клавиатуру на клавиатуре возврата!D:

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 01 февраля 2019

Вам нужно установить делегат TextField при создании ячейки

...