Как сделать UITableview с Textfield в swift?

Я хочу, чтобы вид таблицы с текстовыми полями в каждой ячейке,

у меня есть пользовательский класс в Swift файл:

import UIKit

public class TextInputTableViewCell: UITableViewCell{

    @IBOutlet weak var textField: UITextField!
    public func configure(#text: String?, placeholder: String) {
        textField.text = text
        textField.placeholder = placeholder

        textField.accessibilityValue = text
        textField.accessibilityLabel = placeholder
    }
}

тогда в моем ViewController у меня есть

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

    let cell = tableView.dequeueReusableCellWithIdentifier("TextInputCell") as! TextInputTableViewCell

    cell.configure(text: "", placeholder: "Enter some text!")

     text = cell.textField.text

    return cell

}

что хорошо:

enter image description here

но когда пользователь вводит текст в текстовое поле и нажимает кнопку, Я хочу сохранить строки каждого текстового поля в массиве. Я пробовал с

text = cell.textField.text
println(text)

но он не печатает ничего, как если бы это было пусто

как я могу заставить его работать?

3 ответов


в вашем представлении контроллер становится UITextFieldDelegate

Посмотреть Контроллер

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {

var allCellsText = [String]()

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomTableViewCell

    cell.theField.delegate = self // theField is your IBOutlet UITextfield in your custom cell

    cell.theField.text = "Test"

    return cell
}

func textFieldDidEndEditing(textField: UITextField) {
    allCellsText.append(textField.text)
    println(allCellsText)
}
}

это всегда будет добавлять данные из текстового поля в массив allCellsText.


создать переменную

var arrayTextField = [UITextField]()

после этого в func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{} добавить

self.arrayTextField.append(textfield)

перед возвратом ячейки, после этого для отображения значений с помощью

for textvalue in arrayTextField{
        println(textvalue.text)
    }

этот метод инициализирует ячейку, у вас нет модели для сохранения этих данных, поэтому

text = cell.textfield.text

ничего! вы можете инит var textString в viewcontroller наследование UITextFieldDelegate

optional func textFieldDidEndEditing(_ textField: UITextField)
{
     textString = _textField.text
}
optional func textFieldShouldReturn(_ textField: UITextField) -> Bool{
    return true
}

и cell.textField.text = textString