Cocoa绑定到窗口中的多个视图控制器

时间:2014-10-30 07:02:04

标签: objective-c cocoa cocoa-bindings

我正在努力解决在单独文件中的视图控制器之间使用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访问表格视图的选择索引。

到目前为止我的尝试

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

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

    问:如何在我的MainViewController中设置绑定,以便我可以访问SecondViewController中选择的对象?因为我想从主视图控制器中将该对象的详细信息绘制为子视图。 Cocoa Tutorials中描述的一种主 - 细节界面。

1 个答案:

答案 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的更改。