Как добавить дополнительные текстовые поля, нажав кнопку в табличном представлении - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь добавить опцию, чтобы добавить дополнительные поля ученика в таблицу, чтобы пользователь мог добавить более одного имени ученика.

Но я запутался, как это сделать с помощью представления таблицы.

Меня не интересует скрытие вида с указанием c количества полей.

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {


struct listItems{

    var title : String
    var isExpandable:Bool
    var maxFields :Int

    init(title:String,isExp:Bool,mxF:Int) {

        self.title = title
        self.isExpandable = isExp
        self.maxFields = mxF
    }

    }
@IBOutlet weak var tblListTable: UITableView!


let data : [listItems] = [listItems(title: "Name", isExp: false, mxF: 1), listItems(title: "Student Name", isExp: true, mxF: 20), listItems(title: "Email", isExp: false, mxF: 1)]


override func viewDidLoad() {
    super.viewDidLoad()

    tblListTable.delegate = self
    tblListTable.dataSource = self

    self.tblListTable.reloadData()
    print("isLoaded")

}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return data.count

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    print("cellForRow")

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! ListCell


    cell.lblName.text = data[indexPath.row].title

    if data[indexPath.row].isExpandable == true {
        cell.btnAddField.isHidden = false
        print("ishidden")
    }
    else {
        cell.btnAddField.isHidden = true
    }


    return cell

}

}

Список ячеек класса

import UIKit

protocol AddFieldDelegate : class {
   func addField( _ tag : Int)
}

 class ListCell: UITableViewCell {

@IBOutlet weak var btnAddField: UIButton!
@IBOutlet weak var lblName: UILabel!
@IBOutlet weak var txtField: UITextField!


override func awakeFromNib() {

    super.awakeFromNib()
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

}

func addField( _ tag : Int){



}

}

enter image description here

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Вы на правильном пути, создавая AddFieldDelegate. Однако вместо реализации метода внутри класса ListCell необходимо реализовать его в ViewController.

Сначала измените строку определения класса контроллера представления на:

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource, AddFieldDelegate {

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

cell.delegate = self

После этого переместите определение метода метода addField в контроллер представления. Итак, в вашем контроллере представления добавьте:

func addField(titleOfTextFieldToAdd: String, numberAssociatedWithTextFieldToAdd: Int) {
      data.append(listItems(title: titleOfTextFieldToAdd, isExp: false, mxF: numberAssociatedWithTextFieldToAdd))
      self.tableView.reloadData()
}

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

Наконец, мы должны определить делегата в классе ListCell. Поэтому добавьте эту строку в класс ListCell:

weak var delegate: MyCustomCellDelegate?

Затем вы можете добавить текстовое поле, выполнив в любом месте вашего ListCell класса следующую команду:

delegate?.addField(titleOfTextFieldToAdd: "a name", numberAssociatedWithTextFieldToAdd: 50)

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

0 голосов
/ 18 марта 2020

Вы должны добавить еще один элемент в массив данных по нажатию кнопки и перезагрузить просмотр таблицы.

...