我有一个带有变量名称和方向的自定义类药物。我在一个显示Medication.name和Medication.directions的tableview中的数组中有这个。
我希望用户能够单击行或附件按钮(详细信息?)来编辑所选行中的值。
我理想的情况是从所选行的底部下拉的菜单,其中包含可更新数组中的行并重新加载tableview的可编辑字段。
有没有办法实现这个或类似的东西?我正在玩隐藏的视图字段,并在选择行时让它们显示,但我不确定是否可以将一个锚定到所选行的底部?或者我可以构建一个自定义单元格,其中每个单元格中都有可编辑的字段,这些单元格是隐藏的,单元格具有固定的高度,单击该单元格以显示额外的字段。
同样,如果最佳选择是使用附件视图,那么Detail是最合适的吗?我似乎无法右击并为此拖动一个segue。或者我会在下面使用它?
optional func tableView(_ tableView: UITableView,
accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath)
如果我把它转移到另一个视图控制器,我需要明显使用委托从tableview更改数组,所以我希望找到一个更简单的解决方案。
谢谢!感谢这个新手的任何提示
这就是我被塞住的地方:
let vc = segue.destinationViewController as! MedDetailViewController
vc.delegate = self
let MedRow = self.tableView.indexPathForSelectedRow()!
let passMed = myMedsList[MedRow] //this row doesn't work
vc.detailMed = passMed
答案 0 :(得分:0)
segue不仅是实现此目的的最简单方法,您还可以利用展开segue自动返回已编辑的值。
不需要代表团。没有自定义代码可以向您的单元格添加隐藏的视图。
如果您只有一个segue,请将其添加到行,而不是附件。用户倾向于期望点击该行有所作为。如果它没有做任何事情,大多数用户就不会尝试点击配件。
点击附件意味着辅助操作可以执行与点击行不同的操作。
我会在Storyboard中设置show
segue。编写的代码更少,维护的代码更少。让Storyboard为你工作。
<强>更新强>
这是Apple关于Using Unwind Segues的技术说明,以及他们的Swift示例,说明目标(呈现)视图控制器如何从源(呈现)视图控制器访问数据。
@IBAction func unwindToMainMenu(sender: UIStoryboardSegue)
{
let sourceViewController = sender.sourceViewController as! MedDetailViewController
// Update the medsList array with the new detailMed
let medRow = self.tableView.indexPathForSelectedRow().row
medsList[medRow] = sourceViewController.detailMed
}
更新2:
您希望在使用prepareForSegue:方法展开segue之前更新详细视图控制器的detailMed属性。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "unwindToMedications"
{
// Update the detailMed if the user has edited it
self.detailMed = ... // the edited medication you're returning
}
}
更新3:
后退按钮(或向后滑动)只是将推出的视图控制器弹出堆栈,但没有被调用的segue。您需要从“完成”按钮中明确地连接一个segue,它将为您解除并更新meds列表。
您明确解除的原因是要区分用户是要提交还是取消任何更改。 (他们是否做了改变,但他们想忽略它,所以他们按下了回来?)
您有两个选项,两个选项都可以使用,并且由您决定如何呈现可编辑的详细信息。 (我更喜欢push来显示细节,以及用于编辑表单的模态,但无论哪种方式都有效)。
推送详细视图控制器。有一个完成按钮。用户可以使用“后退”按钮取消,或使用“完成”按钮接受任何已更改的中心详细信息。
使用“取消”和“完成”按钮显示模态视图控制器。同样,用户可以取消(无需更改),或点击完成(返回并)接受更改。
对于任一演示文稿,您将展开的segue连接到“完成”按钮。这将做的是调用Meds列表视图控制器展开操作。在该展开代码中,您可以获得med详细信息并更新meds列表,如前所述。
提及核心数据:
有一种替代方法,它不是比segues更容易学习,但它非常适合。 (需要注意的是,如果不是这个应用程序,那么下一个应用程序。)
核心数据和NSFetchedResultsController
。您保存已编辑的药物,并NSFetchedResultsControllerDelegate
为您更新药物清单。
有些人可能会说这太过分了,但是自从我开始使用NSFetchedResultsController以来,我希望我早点学会它。