我的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行并且仅编辑了第一行时,将插入另一行,而我不希望这样做。
答案 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
}
}
}
谢谢大家!非常感谢。