0

我有一个带有变量名称和方向的自定义类药物。我在一个数组中有这个,它在一个显示 Medication.name 和 Medication.directions 的 tableview 中呈现。

我希望用户能够单击行或附件按钮(详细信息?)来编辑所选行中的值。

我的理想情况是从选定行的底部下拉菜单,其中包含可编辑字段,这些字段将更新数组中的行并重新加载表格视图。

有没有办法完成这个或类似的事情?我正在玩隐藏视图字段并在选择行时显示它们,但我不确定是否可以将一个锚定到所选行的底部?或者我可以构建一个自定义单元格,该单元格在每个单元格中都有可编辑的字段,隐藏,单元格的固定高度在单击它时会更改以显示额外的字段。

同样,如果最好的选择是使用附件视图,那么 Detail 是最合适的吗?我似乎无法右键单击并为此拖动 segue。或者我会在下面使用它吗?

optional func tableView(_ tableView: UITableView,
accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath)

如果我将它转移到另一个视图控制器,我显然需要使用委托来更改 tableview 中的数组,所以我希望找到一个更简单的解决方案。

谢谢!感谢这个新手的任何提示

这是我坚持使用segue的地方:

        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
4

1 回答 1

0

转场不仅是完成此任务的最简单方法,您还可以利用展开转场自动返回您编辑的值。

无需委托。没有自定义代码可以将隐藏视图添加到您的单元格。

如果您只有一个 segue,请将其添加到行中,而不是附件。用户倾向于期望点击行会有所作为。如果它没有做任何事情,大多数用户就不会尝试点击附件。

点击附件是一种辅助动作,与点击行不同。

我会show在 Storyboard 中设置 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:

您想在展开 segue 之前使用 prepareForSegue: 方法更新详细视图控制器的 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。您需要从 Done 按钮显式连接一个 segue,该按钮将为您展开并更新药物列表

显式展开的原因是为了区分用户是要提交还是取消任何更改。(他们是否做出了改变,但他们想忽略它,所以他们按下了返回?)

您有两个选项,这两个选项都可以使用,您可以自行决定如何呈现可编辑的详细信息。(我更喜欢推送来显示详细信息,以及编辑表单的模式,但无论哪种方式都有效)。

  1. 推送详细视图控制器。有一个完成按钮。用户可以使用后退按钮取消,或使用完成按钮接受任何更改的医疗详细信息。

  2. 显示带有取消和完成按钮的模态视图控制器。同样,用户可以取消(返回而不更改),或点击完成以(返回并)接受更改。

对于任一演示文稿,您都需要将一个展开转场连接到“完成”按钮。这将调用 Meds 列表视图控制器展开操作。在该展开代码中,您可以获取药物详细信息并更新药物列表,正如我们之前讨论的那样。

关于核心数据的提及:

有一种替代方法并不比 segues 更容易学习,但它非常适合。(要记住的一点,如果不是这个应用程序,那么是下一个应用程序。)

核心数据和NSFetchedResultsController. 您保存编辑的药物,并NSFetchedResultsControllerDelegate为您更新药物列表。

有人可能会说这太过分了,但自从我开始使用 NSFetchedResultsController 之后,我希望我能早点学会它。

于 2015-05-25T07:39:51.123 回答