【问题标题】:How to add additional textfields by clicking button in table view如何通过单击表格视图中的按钮来添加其他文本字段
【发布时间】:2020-06-29 07:18:51
【问题描述】:

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

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

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

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



}

}

【问题讨论】:

  • 告诉我们你到目前为止做了什么。
  • 好的.. 我会编辑更多细节的问题
  • @Jaseel.Dev 您需要根据数据数组中所需的索引添加另一个对象。例如:listItems(title: "NickName", isExp: false, mxF: 1) 它应该插入到数据数组的索引 2 处。然后重新加载表格视图。我希望你能澄清我的观点。
  • 是的..你能不能用代码把它解释为答案..我会把它标记为答案

标签: swift xcode swift3 swift4 swift5


【解决方案1】:

您必须在单击按钮时在数据数组中附加另一个项目并重新加载表格视图。

【讨论】:

    【解决方案2】:

    您在创建AddFieldDelegate 时处于正确的轨道上。但是,您需要在 ViewController 中实现它,而不是在 ListCell 类中实现该方法。

    首先,将视图控制器类定义行改为:

    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)
    

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

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多