Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 按钮打开时在新行中添加测试字段_Swift_Uitableview_Tableview - Fatal编程技术网

Swift 按钮打开时在新行中添加测试字段

Swift 按钮打开时在新行中添加测试字段,swift,uitableview,tableview,Swift,Uitableview,Tableview,有一个表视图,我在第二个单元格中创建了一个按钮。我用协议处理了按钮触碰事件。我想在“添加按钮触碰”时在电话号码文本字段正下方的当前部分的新行中添加一个空文本字段,但我无法处理它。 表视图单元格: protocol InsertTableCellDelegate { func insertTableCellDelegate_addrowbtn(sender:InsertTableCell1) } class InsertTableCell1: UITableViewCell {

有一个表视图,我在第二个单元格中创建了一个按钮。我用协议处理了按钮触碰事件。我想在“添加按钮触碰”时在电话号码文本字段正下方的当前部分的新行中添加一个空文本字段,但我无法处理它。

表视图单元格:

protocol InsertTableCellDelegate {
    func insertTableCellDelegate_addrowbtn(sender:InsertTableCell1)
}
class InsertTableCell1: UITableViewCell {

    var delegate : InsertTableCellDelegate?

    @IBOutlet weak var tbCreateRow: UITableView!
    @IBOutlet weak var txtPhoneNumber: JVFloatLabeledTextField!

    override func awakeFromNib() {
        super.awakeFromNib()

    }

    @IBAction func btn_Add_DidTouch(_ sender: Any) {
        if let delegate = self.delegate
        {
            delegate.insertTableCellDelegate_addrowbtn(sender: self)
        }
    }
}
表视图代理:

    func numberOfSections(in tableView: UITableView) -> Int {
      return 3
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     return 1
    }

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

            if indexPath.section == 0 {
                let cell0 = tableView.dequeueReusableCell(withIdentifier: "InsertTableCell0") as! InsertTableCell0

                return cell0
            }else if indexPath.section == 1 {
    //this section should handle add textfield in new row when text button touhed 
                let cell1 = tableView.dequeueReusableCell(withIdentifier: "InsertTableCell1") as! InsertTableCell1

                cell1.delegate = self
                return cell1
            }else {
                let cell2 = tableView.dequeueReusableCell(withIdentifier: "InsertTableCell2") as! InsertTableCell2
                cell2.txtEmail.text = strEditEmail
                return cell2
            }

    }

//protocol of button : 

       func insertTableCellDelegate_addrowbtn(sender: InsertTableCell1) {
            print("touched")
        }

numberOfRowsInSection具有固定数量的单元格。首先,您需要创建一个 动态数据源

示例代码:

var dataSource : [Int] = Array.init(repeating: 1, count: 3)

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

  return dataSource.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
 return dataSource[section]
}

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

        if indexPath.section == 0 {
            let cell0 = tableView.dequeueReusableCell(withIdentifier: "InsertTableCell0") as! InsertTableCell0

            return cell0
        }else if indexPath.section == 1 {
//this section should handle add textfield in new row when text button touhed 
            let cell1 = tableView.dequeueReusableCell(withIdentifier: "InsertTableCell1") as! InsertTableCell1

            cell1.delegate = self
            return cell1
        }else {
            let cell2 = tableView.dequeueReusableCell(withIdentifier: "InsertTableCell2") as! InsertTableCell2
            cell2.txtEmail.text = strEditEmail
            return cell2
        }

}
//按钮的协议:

   func insertTableCellDelegate_addrowbtn(sender: InsertTableCell1) {
        dataSource[1] = dataSource[1] + 1
        tableView.reloadData() // or you can use beginUpdates() and endUpdates()
    }

单击部分中的添加按钮时添加新行的代码示例

//为表视图创建出口

@IBOutlet weak var currentInsetTableView: UITableView!
//声明这些变量

let reuseInsetCellIdentifier = "insertCell";

let titleSection = ["Add Phone", "Add Email"]
var arrayForCellInSection = Array<Any>()
//UITablewView委托的实现

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

    return titleSection.count
}

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

    return arrayForCellInSection[section] as! Int
}

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

    let cell = tableView.dequeueReusableCell(withIdentifier: reuseInsetCellIdentifier, for: indexPath)
            as! CurrentInsertTableViewCell
            cell.backgroundColor = UIColor.black

    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    return 50
    }

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let headerView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: tableView.frame.width, height: 50))
    headerView.backgroundColor = UIColor.black

    let buttonX = 10
    let buttonY = 10
    let buttonWidth = 30
    let buttonHeight = 30

    let button = UIButton(type: .system)
    let imgAdd = UIImage(named: "Add")
    button.setImage(imgAdd, for: .normal)
    button.addTarget(self, action: #selector(buttonClickedForInsertRowInSection(sender:)), for: .touchUpInside)
    button.frame = CGRect(x: buttonX, y: buttonY, width: buttonWidth, height: buttonHeight)
    button.tag = section
    headerView.addSubview(button)

    let label = UILabel()
    label.frame = CGRect.init(x: button.frame.size.width + CGFloat((2 * buttonX)), y: CGFloat(buttonY), width: headerView.frame.width - button.frame.size.width + CGFloat((3 * buttonX)), height: headerView.frame.height - CGFloat((2 * buttonY)))
    label.text = titleSection[section]
    label.textColor = UIColor.white
    headerView.addSubview(label)

    return headerView
}

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

    return 50
}
//CurrentInsertTableViewCell设计 //最终结果:当我们按两次第一部分添加按钮和一次第二部分添加按钮时

update table view://update table Data tblname.BeginUpdate()tblname.insertRowsAtIndexPaths([NSIndexPath(forRow:array.count-1,第1节:0)],withRowAnimation:.Automatic)tblname.endUpdates()numberOfRowsInSection有固定数量的单元格。你不可能用这种方式实现你的解决方案。您需要为此创建一个动态数据源。
func numberOfSections(in tableView: UITableView) -> Int {

    return titleSection.count
}

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

    return arrayForCellInSection[section] as! Int
}

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

    let cell = tableView.dequeueReusableCell(withIdentifier: reuseInsetCellIdentifier, for: indexPath)
            as! CurrentInsertTableViewCell
            cell.backgroundColor = UIColor.black

    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    return 50
    }

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let headerView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: tableView.frame.width, height: 50))
    headerView.backgroundColor = UIColor.black

    let buttonX = 10
    let buttonY = 10
    let buttonWidth = 30
    let buttonHeight = 30

    let button = UIButton(type: .system)
    let imgAdd = UIImage(named: "Add")
    button.setImage(imgAdd, for: .normal)
    button.addTarget(self, action: #selector(buttonClickedForInsertRowInSection(sender:)), for: .touchUpInside)
    button.frame = CGRect(x: buttonX, y: buttonY, width: buttonWidth, height: buttonHeight)
    button.tag = section
    headerView.addSubview(button)

    let label = UILabel()
    label.frame = CGRect.init(x: button.frame.size.width + CGFloat((2 * buttonX)), y: CGFloat(buttonY), width: headerView.frame.width - button.frame.size.width + CGFloat((3 * buttonX)), height: headerView.frame.height - CGFloat((2 * buttonY)))
    label.text = titleSection[section]
    label.textColor = UIColor.white
    headerView.addSubview(label)

    return headerView
}

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

    return 50
}