Swift:表视图中的自定义类数组 - 编辑值:accessory segue或其他?

时间:2015-05-25 05:13:22

标签: uitableview swift segue accessoryview

我有一个带有变量名称和方向的自定义类药物。我在一个显示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

1 个答案:

答案 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来显示细节,以及用于编辑表单的模态,但无论哪种方式都有效)。

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

  2. 使用“取消”和“完成”按钮显示模态视图控制器。同样,用户可以取消(无需更改),或点击完成(返回并)接受更改。

  3. 对于任一演示文稿,您将展开的segue连接到“完成”按钮。这将做的是调用Meds列表视图控制器展开操作。在该展开代码中,您可以获得med详细信息并更新meds列表,如前所述。

    提及核心数据:

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

    核心数据和NSFetchedResultsController。您保存已编辑的药物,并NSFetchedResultsControllerDelegate为您更新药物清单。

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