2014-10-30 50 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

相關問題