如果上一个单元格的文本字段已填写,则将单元格添加到UITableView

时间:2018-09-07 11:18:03

标签: ios swift xcode uitableview

我的UITableView中有一个ViewController。每个单元格都包含一个textfield,有人可以在其中输入新文本(待办事项列表)。现在,我要添加一个新单元格,仅在上一个单元格的textfield包含文本的情况下,该单元格已经包含一个新的textfield

当前,我使用UIButton添加一个新的单元格,并且可以正常工作并调整表格视图的大小,以便所有单元格都可见,但是我希望在填充前一个单元格后自动执行此操作,以便变得更加用户友好

This is what my Storyboard looks like.

这是我当前用来添加新行的代码:

    @IBAction func btnAddRow_TouchUpInside(_ sender: Any) {

    toDoTableView.beginUpdates()
    amountCells.append("")
    self.toDoTableView.insertRows(at: [IndexPath.init(row: self.amountCells.count - 1, section: 0)] , with: .automatic)
    toDoTableView.endUpdates()
    tblHeight.constant = toDoTableView.contentSize.height

}

关于如何实现此目标的任何想法?预先感谢。

编辑:我已尝试使用EditingDidEnd

    class TextFieldsCell: UITableViewCell {

    @IBOutlet weak var txtToDo: UITextField!

    @IBAction func txtToDo_EditingDidEnd(_ sender: Any) {
            if(!(txtToDo.text?.isEmpty)! {
                print("Insert Code to Add New Row")
            }
        }
}

执行此操作时,无法从toDoTableView访问ViewController。可能导致的另一个问题是,当已经有5行并且仅编辑了第一行时,将插入另一行,而我不希望这样做。

4 个答案:

答案 0 :(得分:2)

您可以检查viewController本身中的文本字段是否为空。您只需从 storyboard cellForRowAt 中确认文本字段的委托,并将标签赋予该文本字段

例如,

cell.yourTextField.delegate = self
cell.yourTextField.tag = indexPath.row

并在 textField委托方法中检查文本字段是否为空。用类似的方法创建单元格对象

func textFieldDidEndEditing(_ textField: UITextField) {
     rowBeingEditedInt = textField.tag
     let indexPath = IndexPath(row:rowBeingEdited! , section:0 )
     let cell = yourTableView.cellForRow(at: indexPath) as! yourTableViewCell
  // check cell.yourtextField.text isempty and do your condition
 }

答案 1 :(得分:0)

将其添加到您的textfield委托中,并用您的表视图名称替换tableview

func textFieldDidEndEditing(textField: UITextField!){

    var cell: UITableViewCell = textField.superview.superview as UITableViewCell
    var table: UITableView = cell.superview as UITableView
    let textFieldIndexPath = table.indexPathForCell(cell)
    if textFieldIndexPath.row == (yourdataArray.count - 1)
    {
        print("came to last row")

        if ((textField.text?.count)! > 0){

            print("text available")

            toDoTableView.beginUpdates()
            amountCells.append("")
            self.toDoTableView.insertRows(at: [IndexPath.init(row:
                self.amountCells.count - 1, section: 0)] , with: .automatic)
            toDoTableView.endUpdates()
            tblHeight.constant = toDoTableView.contentSize.height
        }
    }
}

答案 2 :(得分:0)

您可以尝试一下。

cellForRowAt方法中,首先设置UITableViewCell textField委托。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:TableViewCell = self.tblvw.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell
    cell.txtField.delegate = self
    cell.txtField.tag = indexPath.row
    cell.txtField?.text = amountCells[indexPath.row]

    return cell
}

textFieldDidEndEditing中,您只需要检查以下内容并根据其执行进一步的任务即可。

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.resignFirstResponder()
}

func textFieldDidEndEditing(_ textField: UITextField) {
    if textField.text?.count == 0 || textField.tag != self.amountCells.count - 1 {

    }
    else {
        self.tblvw.beginUpdates()
        amountCells.append("")
        self.tblvw.insertRows(at: [IndexPath.init(row: self.amountCells.count - 1, section: 0)] , with: .automatic)
        self.tblvw.endUpdates()
    }
}

答案 3 :(得分:0)

最终通过结合@Mauli和@Vicky_Vignesh / @Kuldeep的答案来修复它。

    func textFieldDidEndEditing(_ textField: UITextField) {
    let rowBeingEditedInt = textField.tag
    let indexPath = IndexPath(row:rowBeingEditedInt , section:0 )
    let cell = toDoTableView.cellForRow(at: indexPath) as! TextFieldsCell
    let table: UITableView = cell.superview as! UITableView

    let textFieldIndexPath = table.indexPath(for: cell)
    if textFieldIndexPath?.row == (amountCells.count - 1) {

        if(!(cell.txtToDo.text?.isEmpty)!) {
            toDoTableView.beginUpdates()
            amountCells.append("")
            self.toDoTableView.insertRows(at: [IndexPath.init(row: self.amountCells.count - 1, section: 0)] , with: .automatic)
            toDoTableView.endUpdates()
            tblHeight.constant = toDoTableView.contentSize.height
        }

    }

}

谢谢大家!非常感谢。