gpt4 book ai didi

objective-c - Cocoa 跨窗口中的多个 View Controller 进行绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 17:11:11 25 4
gpt4 key购买 nike

我正在努力解决在单独文件中的 View Controller 之间使用 Cocoa Bindings 的情况。我检查了一些链接以获取灵感,但仍然没有。我认为最好发布一个提问并让我休息一下......

类似主题: Binding selection across multiple view controllers in a single window interface

Sharing an NSArrayController between multiple views in separate NIB files

我有一个主 Controller MainViewController.m/.h/.xib 和两个自定义 View 。

还有一个单独的 View Controller SecondViewController.m/.h/.xib。它的 xib 基本上包含一个 TableView ,以及一个绑定(bind)到 TableView 列的 ArrayController。这对于绑定(bind)和选择等效果很好。

现在回到我的主 Controller ,我想从 SecondViewController 访问 TableView 的选择索引。

到目前为止我的尝试

  1. 在我的主 XIB 中,我在 IB 中创建了一个 ViewController,并将自定义类和 nib 文件设置为 SecondViewController

  2. SecondViewController 的 XIB 中创建了一个 ArrayController,其 contentArray 设置为 KVC 列表属性“lists”。这会在表格 View 中正确显示内容,如上所述。

    问:如何在 MainViewController 中设置绑定(bind),以便可以访问在 SecondViewController 中选择的对象?因为我想从主视图 Controller 中绘制该对象的详细信息作为 subview 。 Cocoa 教程中描述的一种主从接口(interface)。

最佳答案

如果您想使用键值观察让您的MainViewController了解由SecondViewController管理的表中所选行的更改>,我认为最好的方法是为 NSArrayController 绑定(bind) Selection Indexes 设置一个值(这是为第二个 TableView 提供内容的数组 Controller ) .

在您的 SecondViewController 类文件中添加如下属性:

@property (nonatomic, copy) NSIndexSet *secondTableSelectedIndexes;

现在,在 SecondViewController.xib 中选择相关的绿色 NSArrayController 立方体,导航到其绑定(bind)检查器并设置 Selection Indexes 绑定(bind)以引用您刚刚创建的索引集属性。这是一个读写绑定(bind)。您可能永远不会自己在代码中编写它(尽管您可以根据需要编写),但是每次您在 SecondViewController 管理的表中选择新行时,此索引集都会自动更新,因此,它您将观察到这个属性吗?

要设置观察者,只要您可以访问两个 View Controller ,请添加以下内容:

/* Have my main view controller watch for selection changes in my 
* second view controller's table
*/

self.secondViewController = [[SecondTableViewController alloc] initWithNibName:@"SecondTableViewController" bundle:nil];

[self.secondViewController addObserver:self.mainViewController
forKeyPath:@"secondTableselectedIndexes"
options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionPrior
context:nil];

然后可以通过在 MainViewController 中实现 -observeValueForKeyPath:ofObject:change:context: 来获取对 secondTableSelectedIndexes 的更改。

关于objective-c - Cocoa 跨窗口中的多个 View Controller 进行绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com