首页 > 解决方案 > 如何通过单击表格视图中的按钮来添加其他文本字段

问题描述

我正在尝试添加一个选项以在表中添加其他学生字段,以便用户可以添加多个学生姓名。

但我很困惑如何使用表格视图来做到这一点。

我对隐藏具有特定数量字段的视图不感兴趣。

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){



}

}

在此处输入图像描述

标签: swiftxcodeswift3swift4swift5

解决方案


您在创建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)

有关委托的更多信息,请查看问题的答案。


推荐阅读