Xcode 将文本字段绑定到来自不同 ViewController 的 Table 视图中的所选项目
Xcode Bind a Text Field to the Selected Item in a Table View From a Different ViewController
Xcode7,Swift2,MacOSX应用.
我有一个具有以下简单结构的故事板; WindowController 包含一个 SplitViewController。拆分视图的顶部面板包含一个 ViewController,其中包含一个 Table 视图。拆分视图的底部面板包含一个文本字段。
我的 Table 视图使用数组控制器 TableViewArrayController) 绑定到我的数据模型中的实体。 TableViewArrayController 已添加到包含视图控制器的 Table 视图中。 Table 视图可以很好地显示我的数据。
我向拆分视图底部面板视图控制器添加了第二个数组控制器 (TextFieldArrayController),并将其绑定到与 TableViewArrayController 相同的模型对象上下文。我将文本字段绑定到 TextFieldArrayController。文本字段显示数据模型中的第一项,但 TextFieldArrayController 未将其选择的 属性 与 TableViewArrayController 同步。
这似乎是一个非常简单的设置,我希望在 Table 视图中显示所选行中的项目并不少见 ViewController。无论我尝试什么,我都无法使文本字段显示所选行的 属性。
如果我将文本字段添加到 Table 视图的 ViewController 并将其绑定到它显示的同一个数组控制器,并允许我编辑所选行的 属性 .
谁能建议我应该如何将一个视图控制器中的文本字段绑定到位于不同视图控制器中的 Table 视图的选定行?
使用多个 NSArrayController 实例来组织主要细节实际上是非常不常见的设置。
您不需要 TextFieldArrayController。您将文本字段绑定到与绑定到 table 视图的相同的 NSArrayController(在您的情况下是 TableViewArrayController)。以下是为文本视图设置绑定的方法:
"your data field" 是您要在文本字段中显示的模型中的字段。
在您使用 2 个阵列控制器的设置中,您希望如何同步选择?您可以尝试将一个阵列控制器的选择索引绑定到第二个阵列控制器的相同 属性...但我从未见过这样的设置。甚至不确定它是否有效。
示例如下:https://github.com/emankovski/stackexchangesplitexample
更新:该示例显示了如何使用拆分视图代替子控制器。子控制器方法也是可能的,但无缘无故需要更多代码。
如果您想使用更复杂的解决方案,您需要自定义 NSSplitViewController:
class SplitViewController: NSSplitViewController {
dynamic var items = [String]()
@IBOutlet var arrayController: NSArrayController!
override func viewDidLoad() {
super.viewDidLoad()
items.append("One")
items.append("Two")
items.append("Three")
//
let master = self.splitViewItems[0].viewController as! MasterViewController
master.arrayController = self.arrayController
let detail = self.splitViewItems[1].viewController as! DetailViewController
detail.arrayController = self.arrayController
}
然后每个主细节控制器都应该在父级中引用 NSArrayController:
class MasterViewController: NSViewController {
dynamic var arrayController: NSArrayController?
}
并且:
class DetailViewController: NSViewController {
dynamic var arrayController: NSArrayController?
}
然后你可以绑定master的table视图到
然后将详细信息的文本编辑绑定到:
正如您看到的那样,无缘无故的操作越来越多...
Xcode7,Swift2,MacOSX应用.
我有一个具有以下简单结构的故事板; WindowController 包含一个 SplitViewController。拆分视图的顶部面板包含一个 ViewController,其中包含一个 Table 视图。拆分视图的底部面板包含一个文本字段。
我的 Table 视图使用数组控制器 TableViewArrayController) 绑定到我的数据模型中的实体。 TableViewArrayController 已添加到包含视图控制器的 Table 视图中。 Table 视图可以很好地显示我的数据。
我向拆分视图底部面板视图控制器添加了第二个数组控制器 (TextFieldArrayController),并将其绑定到与 TableViewArrayController 相同的模型对象上下文。我将文本字段绑定到 TextFieldArrayController。文本字段显示数据模型中的第一项,但 TextFieldArrayController 未将其选择的 属性 与 TableViewArrayController 同步。
这似乎是一个非常简单的设置,我希望在 Table 视图中显示所选行中的项目并不少见 ViewController。无论我尝试什么,我都无法使文本字段显示所选行的 属性。
如果我将文本字段添加到 Table 视图的 ViewController 并将其绑定到它显示的同一个数组控制器,并允许我编辑所选行的 属性 .
谁能建议我应该如何将一个视图控制器中的文本字段绑定到位于不同视图控制器中的 Table 视图的选定行?
使用多个 NSArrayController 实例来组织主要细节实际上是非常不常见的设置。 您不需要 TextFieldArrayController。您将文本字段绑定到与绑定到 table 视图的相同的 NSArrayController(在您的情况下是 TableViewArrayController)。以下是为文本视图设置绑定的方法:
"your data field" 是您要在文本字段中显示的模型中的字段。
在您使用 2 个阵列控制器的设置中,您希望如何同步选择?您可以尝试将一个阵列控制器的选择索引绑定到第二个阵列控制器的相同 属性...但我从未见过这样的设置。甚至不确定它是否有效。
示例如下:https://github.com/emankovski/stackexchangesplitexample
更新:该示例显示了如何使用拆分视图代替子控制器。子控制器方法也是可能的,但无缘无故需要更多代码。
如果您想使用更复杂的解决方案,您需要自定义 NSSplitViewController:
class SplitViewController: NSSplitViewController {
dynamic var items = [String]()
@IBOutlet var arrayController: NSArrayController!
override func viewDidLoad() {
super.viewDidLoad()
items.append("One")
items.append("Two")
items.append("Three")
//
let master = self.splitViewItems[0].viewController as! MasterViewController
master.arrayController = self.arrayController
let detail = self.splitViewItems[1].viewController as! DetailViewController
detail.arrayController = self.arrayController
}
然后每个主细节控制器都应该在父级中引用 NSArrayController:
class MasterViewController: NSViewController {
dynamic var arrayController: NSArrayController?
}
并且:
class DetailViewController: NSViewController {
dynamic var arrayController: NSArrayController?
}
然后你可以绑定master的table视图到
然后将详细信息的文本编辑绑定到:
正如您看到的那样,无缘无故的操作越来越多...