我正在努力解决在单独文件中的视图控制器之间使用Cocoa绑定的问题。 我已经检查了一些灵感链接,但仍然没有。我认为发布一个更好 我有点质疑和休息......
类似主题: Binding selection across multiple view controllers in a single window interface
Sharing an NSArrayController between multiple views in separate NIB files
我有一个带有两个自定义视图的主控制器MainViewController.m/.h/.xib
。
还有一个单独的视图控制器SecondViewController.m/.h/.xib
。它的xib基本上包含一个表视图,以及一个绑定到表视图列的ArrayController。这适用于绑定和选择等。
现在回到我的主控制器,我想从SecondViewController
访问表格视图的选择索引。
到目前为止我的尝试
在我的主XIB中,我在IB中创建了一个ViewController,并将自定义类和nib文件设置为SecondViewController
。
在SecondViewController
的XIB中创建了一个ArrayController,其contentArray设置为KVC列表属性' list'。这会在表格视图中正确显示内容,如上所述。
问:如何在我的MainViewController中设置绑定,以便我可以访问SecondViewController
中选择的对象?因为我想从主视图控制器中将该对象的详细信息绘制为子视图。 Cocoa Tutorials中描述的一种主 - 细节界面。
答案 0 :(得分:1)
如果您想使用键值观察让MainViewController
了解您SecondViewController
管理的表格中所选行的更改,我认为最好这样做的方法是为NSArrayController
绑定Selection Indexes
设置一个值(这是为第二个表视图提供内容的数组控制器)。
在SecondViewController
类文件中添加如下属性:
@property (nonatomic, copy) NSIndexSet *secondTableSelectedIndexes;
现在在NSArrayController
中选择相关的绿色SecondViewController.xib
多维数据集,导航到它的绑定检查器并设置Selection Indexes
绑定以引用刚刚创建的索引集属性。这是一个读写绑定。您可能永远不会在代码中自己编写代码(尽管您可以根据需要),但每次在SecondViewController
- 托管表中选择一个新行时,此索引集将自动更新,因此,这是属性你会观察到的。
要设置观察者,只要您有权访问两个视图控制器,请添加以下内容:
/* 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];
然后可以通过在secondTableSelectedIndexes
中实施-observeValueForKeyPath:ofObject:change:context:
来获取对MainViewController
的更改。