我有一个在TableView中显示的UITableViewCell的子类。每个单元格都有一个文本字段。当调用textFieldDidEndEditing func时,我想将输入的文本保存为我的托管对象上下文中的NSManagedObject的属性。
这个函数在我的tableViewCell类中实现:
func textFieldDidEndEditing(textField: UITextField) {
let viewController = ViewController()
let indexPath: NSIndexPath!
viewController.updateCommitsInMOC(self, atIndexPath: indexPath!)
}
这就是它所调用的功能。这个函数在我的ViewController类中实现,该类控制由tableViewCells组成的TableView:
func updateCommitsInMOC(cell: CommitTableViewCell, atIndexPath indexPath: NSIndexPath) {
// Fetch Commit
let commit = fetchedResultsController.objectAtIndexPath(indexPath) as! Commit
// Update Cell
commit.contents = cell.commitContents.text!
if cell.repeatStatus.selectedSegmentIndex == 1 { commit.repeatStatus = true }
saveManagedObjectContext()
}
每当用户完成编辑文本字段时,我当然愿意接受有关实现保存行为的其他方法的任何建议。
答案 0 :(得分:1)
您的问题是“如何获取IndexPath”?而不是UITableviewCell试图找出它在indexFieldDidEndEditing中的indexPath,为什么不在updateCommitsInMOC函数中弄清楚它?
假设你有对tableView的引用,你可以这样做
func updateCommitsInMOC(cell: CommitTableViewCell) {
guard let indexPath = tableView.indexPathForCell(cell) else {
return
}
// Fetch Commit
let commit = fetchedResultsController.objectAtIndexPath(indexPath) as! Commit
// Update Cell
commit.contents = cell.commitContents.text!
if cell.repeatStatus.selectedSegmentIndex == 1 { commit.repeatStatus = true }
saveManagedObjectContext()
}
答案 1 :(得分:1)
您可以在单元格textField中将标记添加为行。 像这样:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("idCell")
cell.textField.tag = indexPath.row
return cell
}
和textField委托:
func textFieldDidEndEditing(textField: UITextField) {
let viewController = ViewController()
let indexPath = NSIndexPath(forRow: textField.tag, section: 0)
viewController.updateCommitsInMOC(self, atIndexPath: indexPath!)
}
或者你可以使用superview:
func textFieldDidEndEditing(textField: UITextField) {
let view = textField.superview!
let cell = view.superview as! UITableViewCell
let viewController = ViewController()
let indexPath = itemTable.indexPathForCell(cell)
viewController.updateCommitsInMOC(self, atIndexPath: indexPath!)
}
答案 2 :(得分:0)
我建议你在你的tableview中使用
setEditing(editing, animated: animated)
方法。
然后在其中,您可以管理从fetchResultController.indexPathForObject(inputObject)
或使用fetchedResultsController.objectAtIndexPath(indexPath)
检索它的单个对象。
最后,您可以使用self.managedObjectContext.saveToPersistentStore()
或self.managedObjectContext.save()
。