2014-07-16 2 views
0

나는 코코아 신청서에 NSCollectionView이 있습니다.코코아 - 컬렉션보기에서 현재 선택된 객체를 얻는 방법?

나는 다음과 같은 로터리 방식을 통해 컬렉션 뷰에서 현재 선택한 개체에 대한 정보를 얻을 수 있습니다 :

NSIndexSet* index = [self.currentCollectionView selectionIndexes]; 
CardModel* card = [[self.currentCollectionView itemAtIndex:index.firstIndex] representedObject]; 

NSCollectionView 클래스가 선택한 개체를 반환하는 방법이 있습니까를? 아니면 이것에 대해 선호하는 방법입니까?

답변

0

selectionIndexesNSCollectionView의 선택에 액세스하는 유일한 방법인지 묻는다면 대답은 예입니다.

0

NSTableView과 달리 선택에 대한 알림을 제공하는 대리인/알림이 없습니다. 그래서 selectionIndexes 가야합니다.

어레이 컨트롤러에 대한 옵저버를 설정했는지 여부는 잘 모르겠습니다. 그러나 표시된 코드는 선택한 객체 만 검색하는 것입니다. 객체 선택에 대한 알림을 받으려면 어레이 컨트롤러에서 키 경로 selectionIndexes (또는 IB에서 설정 한 내용)에 대한 옵저버를 추가해야합니다.

[myArrayController addObserver:self 
     forKeyPath:@"selectionIndexes" 
     options:NSKeyValueObservingOptionNew 
     context:nil]; 

-(void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
         change:(NSDictionary *)change 
         context:(void *)context 
{ 
    if([keyPath isEqualTo:@"selectionIndexes"]) 
    { 
     // This will be invoked whenever objects are selected in Collection View. 
     // Now collectionView selectionIndexes can be used to get the selected objects. 
    } 
} 
0

하나의 접근법은 xib에서 바인딩을 사용하는 것이다. 컬렉션의 뷰가 나타내는 항목에 대해 NSArrayController를 설정합니다. xib의 Collection View의 Bindings Inspector에서 CollectionView의 내용을 collectionViewArrayController.arrangedObjects에 바인딩합니다. 또한 선택 색인을 collectionViewArrayController.selectionIndexes에 바인드하십시오. 이제 배열 컨트롤러의 콘센트를 만들 수 있습니다. 예를 들어 App Delegate에서 선택한 객체에 액세스 할 수 있습니다.

예를 들어 selectedCard 속성을 지정하고 collectionViewAC 콘센트 속성을 collectionViewArrayController에 연결하도록 선언하십시오. 이제 selectedObjects을 통해 원하는 카드 항목을 가져올 수 있습니다.

- (id)selectedCard 
{ 
    id selectedCards = [collectionViewAC selectedObjects]; 
    if ([selectedCards count]) { 
     return [selectedCards objectAtIndex:0]; 
    } 
    return nil; 
} 

바인딩을 사용하면 모든 것이 관찰되고 업데이트됩니다.

관련 문제