Xcode将文本字段绑定到来自不同ViewController的表视图中的选定项

时间:2016-06-16 22:31:18

标签: master-detail nsarraycontroller

Xcode 7,Swift 2,Mac OS X应用程序。

我有一个具有以下简单结构的故事板; WindowController包含一个SplitViewController。 Split View的顶部面板包含一个ViewController,其中包含一个Table View。拆分视图的底部面板包含文本字段。

我的表视图使用数组控制器TableViewArrayController绑定到我的数据模型中的实体。 TableViewArrayController已添加到包含View Controller的Table View中。表视图显示我的数据正常。

我在Split View底部面板View Controller中添加了第二个Array Controller(TextFieldArrayController),并将其绑定到与TableViewArrayController相同的Model Object Context。我将Text Field绑定到TextFieldArrayController。 Text Field显示数据模型中的第一项,但TextFieldArrayController未将其selected属性与TableViewArrayController同步。

这似乎是一个非常简单的设置,我希望在一个不同的ViewController内的对象中显示表视图中所选行的项目并不罕见。无论我尝试什么,我都无法使文本字段显示所选行的属性。

如果我将一个文本字段添加到表视图的ViewController并将其绑定到它显示的同一个数组控制器,并允许我编辑所选行的属性。

有人可以建议我应该如何将一个视图控制器中的文本字段绑定到位于不同视图控制器中的表视图的选定行?

1 个答案:

答案 0 :(得分:-1)

使用NSArrayController的多个实例来组织主要细节实际上是非常罕见的设置。 你不需要TextFieldArrayController。将文本字段绑定到与表视图绑定的NSArrayController相同的NSArrayController(在这种情况下,它是TableViewArrayController)。以下是为文本视图设置绑定的方法:

enter image description here

"您的数据字段"是您希望在文本字段中显示的模型中的字段。

在使用2个阵列控制器的设置中,您希望如何同步选择?您可以尝试将一个阵列控制器的选择索引绑定到第二个阵列控制器的相同属性...但我从未见过这样的设置。甚至不确定它是否会起作用。

以下是示例:https://github.com/emankovski/stackexchangesplitexample

更新:该示例显示如何使用拆分视图而不是子控制器。子控制器的方法也是可行的,但是没有理由需要更多的代码。

如果您确实想使用更复杂的解决方案,则需要自定义NSSplitViewController:

class MasterViewController: NSViewController {

dynamic var arrayController: NSArrayController?
}

然后每个主细节控制器都应该在父级中引用NSArrayController:

class DetailViewController: NSViewController {

dynamic var arrayController: NSArrayController?
}

{{1}}

然后您可以将主表的视图绑定到

enter image description here

然后绑定细节'文字编辑为:

enter image description here

当你看到更多的行动没有理由......