2014-10-30 19 views
1

我很努力与案件使用可视绑定之间的视图控制器在单独的文件。 我检查了一些灵感的链接,但仍然不存在。我想这是更好地张贴 问题和休息我的心有点...可可绑定在一个窗口中的多个视图控制器

类似主题: 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创建一个视图控制器,并设置自定义类和笔尖文件SecondViewController

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

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

+0

在MainVC中创建指向SecondVC实例的第二个VC出口。 SecondVC中有一个指向SecondVC中的表格视图的tableView出口。在MainVC中,使用secondVC.tableView.selectionIndex的keypath ...对吗?这很漂亮,所以我想知道你是否想要做更复杂的事情。 – stevesliva 2014-10-30 18:04:53

+0

嗯也许这很容易。所以,你的意思是我需要在VCVC中使用tableview插件,以便稍后在mainvc中公开它?顺便说一句没有selectionIndex,只有selectedRowIndexes - 这就是你的意思? – Rabiees 2014-10-31 08:13:49

+0

是的,语义。但只要你的MainVC做一些工作来跟踪第二个VC实例(避免一个零指针),我不明白为什么你不能通过分层的keypath进行绑定。 – stevesliva 2014-10-31 15:56:07

回答

1

如果你想使用键 - 值观察使你MainViewController意识到你SecondViewController管理表中的更改选定行的,我觉得做的最好的事情是这样的设定值对于NSArrayController绑定Selection Indexes(这是数组控制器为您的第二个表视图提供内容)。

在你SecondViewController类文件添加属性是这样的:

@property (nonatomic, copy) NSIndexSet *secondTableSelectedIndexes; 

现在SecondViewController.xib选择培训相关绿色NSArrayController立方体,导航到它的绑定检查,并设置Selection Indexes结合引用索引设置属性你刚创建。这是一个读写绑定。你可能永远不会自己写代码(尽管你可以,如果你愿意的话),但是每次你在你的SecondViewController -managed表中选择一个新行时,这个索引集会自动更新,因此,你会观察到这个属性。

要设置观察者,无论你都可以访问两个视图控制器,添加以下内容:

/* 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然后可以在MainViewController实施-observeValueForKeyPath:ofObject:change:context:有所回升。

+0

好的,我会尝试选择索引。但是在表视图中获取正确字符串的问题仍然存在,仍然显示“(” – Rabiees 2014-11-03 13:17:05

+0

哪个表视图?在SecondTableViewController的xib中有一个表视图,在MainViewController中也有一个表视图?如果你希望你的MainViewController和第二个视图控制器中的选择保持一致,那么就不需要混淆选择索引了。一旦你澄清了表视图的数量,我可以解释绑定 – 2014-11-03 16:03:24

+0

我已经在一个简单的字符串数组的沙箱项目中尝试了这一点在我的mainvc中我有两个数组控制器和一个两列的表视图第一列绑定到mainarraycontroller.arrangedObjects第二列绑定到secondarraycontroller.arrangedObjects。SecondArrayController的contentArray绑定到self.secondViewController.tableArray(secondViewController是一个IBOutlet属性)。第一列很好,第二列显示“(”。 – Rabiees 2014-11-03 17:39:16

相关问题