2014-02-16 65 views
2

我試圖搭配一個帶有標籤界面的基本應用程序,它已經過了幾年,因爲我已經做了任何可可開發,所以我生鏽了......我的應用程序將使用選項卡,並在加載選項卡時顯示項目的默認視圖,允許您單擊其中一個項目以在該項目的視圖中進行交換(想想Chrome,當您打開新選項卡並顯示您最喜歡的網站時你可以點擊打開)。從點擊NSCollectionVIew獲取模型項目

目前我已經爲這個幾乎完全在界面生成器中實現了一個基本的單窗口UI。一個帶有NSCollectionView的窗口,在窗口控制器中使用與ArrayController和NSMutableArray集合項的綁定。很棒。

有兩件事,但是我不確定,這讓我想知道如果我在這裏以編程方式做事情更好,而不是與Interface Builder混淆。特別是兩件事情我不知道該怎麼做:

  1. 獲取點擊NSCollectionView事件和其映射到模型中的點擊項目表示。在新標籤頁此集合鑑於
  2. 加載新實例(用戶可以打開多個標籤頁所有這一切應顯示項目的網格)

#1我真的沒有看到一個偉大的方式做這個。我可以在窗口控制器中捕獲mouseDown,但我不知道如何將其映射回模型。我也爲我的收藏查看項目創建了一個NSView子類,但是我無法找出將該視圖映射到模型的方法...

對於#2我不認爲有很好的方法可以做這不同於以編程方式創建視圖。我唯一的想法是將視圖放在另一個.xib中,並在需要時使用它來創建新視圖。這可能會工作得很好,如果我能弄清楚#1 ...

所以,我最好是以編程方式創建集合視圖還是有什麼我可以在這裏做?

回答

2

NSCollectionViewItemNSViewController的子類,您可以在其中設置/獲取representedObject。我總是用它來訪問底層對象。 ⑵你絕對想分割你的XIB。每當我完成它,我發現它使我的工作變得更容易。

+0

目前集合視圖結合它的內容被綁定到一個NSMutableArray窗口控制器的陣列控制器。我想我沒弄清楚的部分是,如何從點擊中獲取NSCollectionViewItem?我可以在窗口控制器或在CollectionItemView中使用的實際視圖的子類中捕獲mouseDown事件,但是如何將其映射到CollectionViewItem或模型我不知道... – Chad

+0

我想子類NSCollectionView,因爲它沒有捕捉點擊的原生概念。 –

2

爲了別人的利益,我最終做了這件事......雖然我懷疑它可能不太理想,

我創建了一個ItemView,它是NSView的一個子類,並將我的Collection View Item的類設置爲該類。然後,在這個類我做了以下內容:

- (void) mouseDown: (NSEvent *) theEvent 
{ 
    NSCollectionView *myCollectionView = (NSCollectionView *)[self superview]; 
    NSInteger index = [[myCollectionView subviews] indexOfObject:self]; 
    Room *room = [[myCollectionView content] objectAtIndex:index]; 
    AppDelegate *appD = (AppDelegate *)[[NSApplication sharedApplication]delegate]; 
    [appD.windowController loadRoom: room]; 
}