컬렉션보기에는 샘플을 구현하지 않았지만 쿼리에 따라 생각할 수있는 아이디어가 있습니다.
컬렉션보기 항목의 사용자 지정 하위 클래스를 만들고 배경색을 사용하여 선택을 보여주는 하나의 배경보기를 배치 할 수 있습니다.
모음보기에서 선택의 변화는 우리는 대리인이 방법을 사용하여 대리자 호출을 얻을 수 있습니다 때마다 같은
- (무효) collectionView로 (NSCollectionView *) collectionView의 didSelectItemsAtIndexPaths : (NSSet *) indexPaths
이 메서드에서는 사용자 지정 컬렉션 항목의 일부 bool 속성을 사용하여 항목이 이미 선택되어 있는지 여부를 확인할 수 있습니다. 항목이 이미 선택된 경우 컬렉션 항목 배경보기의 배경색을 깨끗하게 설정할 수 있습니다. 그렇지 않으면 선택 색상을 설정할 수 있습니다. 또한 내부적으로 선택된 항목의 인덱스 배열을 관리 할 수 있습니다.
도움이되기를 바랍니다.
필자는 Collection Item의 하위 클래스를 만드는 다중 선택을 보여주기 위해 하나의 샘플을 구현했습니다.
이 샘플에서는 사용자 지정 컬렉션보기 항목을 만들었습니다. 단추가있는 테두리보기가 있고 단추를 눌렀을 때이 항목이 선택된 것처럼 테두리보기 색이 변경됩니다. 인덱스 번호와 같은 항목 속성을 하나 더 만들 수 있습니다. 그리고 당신은이 서브 클래스 내에서 프로토콜을 생성하고 델리게이트 객체를 호출하여 선택한 항목 인덱스를 저장하여 그 위에 몇 가지 연산을 수행 할 수 있습니다.
AppDelegate.h
#import <Cocoa/Cocoa.h>
@class CustomCollectionItem;
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (strong) CustomCollectionItem *collectionViewItem;
@property (strong) NSArray *contents;
@property (nonatomic, weak) IBOutlet NSCollectionView *collectionView;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "CustomCollectionItem.h"
@interface AppDelegate()
@property (weak) IBOutlet NSWindow *window;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self populateCollectionView];
}
- (void)populateCollectionView
{
self.collectionViewItem = [[CustomCollectionItem alloc] init];
self.contents = @[
@{@"itemTitle":@"Item 1",
@"isSelected":@NO,
},
@{@"itemTitle":@"Item 2",
@"isSelected":@NO,
},
@{@"itemTitle":@"Item 3",
@"isSelected":@NO,
},
@{@"itemTitle":@"Item 4",
@"isSelected":@NO,
},
@{@"itemTitle":@"Item 5",
@"isSelected":@NO,
},
@{@"itemTitle":@"Item 6",
@"isSelected":@NO,
},
@{@"itemTitle":@"Item 7",
@"isSelected":@NO,
},
];
[self.collectionView setItemPrototype:self.collectionViewItem];
[self.collectionView setContent:self.contents];
}
@end
CustomCollectionItem.h
#import <Cocoa/Cocoa.h>
@interface CustomCollectionItem : NSCollectionViewItem
@property (nonatomic, weak) IBOutlet NSButton *button;
@property (nonatomic, weak) IBOutlet NSView *borderView;
@property (nonatomic, assign) BOOL showSelection;
- (IBAction)selectItemAction:(id)sender;
@end
CustomCollectionItem.m
#import "CustomCollectionItem.h"
@implementation CustomCollectionItem
- (void)setRepresentedObject:(id)representedObject
{
[super setRepresentedObject:representedObject];
if (representedObject !=nil)
{
[self.button setTitle:[representedObject valueForKey:@"itemTitle"]];
self.showSelection = [[representedObject valueForKey:@"isSelected"] boolValue];
}
else
{
[self.button setTitle:@"No Value"];
[self setShowSelection:NO];
}
}
#pragma mark - Button Action
- (IBAction)selectItemAction:(id)sender
{
self.showSelection = !self.showSelection;
if (self.showSelection)
{
[self.borderView.layer setBackgroundColor:[NSColor grayColor].CGColor];
}
else
{
[self.borderView.layer setBackgroundColor:[NSColor clearColor].CGColor];
}
}
@end
수집 항목을 재사용하는 방법은 무엇입니까? 내 의견으로는, 커스텀 서브 클래 싱을 사용하면 콜렉션 뷰의 프로퍼티를 선택된 아이템의 배열로 추가 할 수 있고 인덱스에 따라 선택 상태를 변경할 수 있습니다. 그러나'NSCollectionView'의 하위 클래스가 좋은 방법인지 확신 할 수 없습니다. –
방금 더 나은 방법으로이 쿼리에 대답하기 위해 하나의 샘플을 만들었습니다. 이전 답변을 편집하고 일부 코드를 추가했습니다. 나는 http://www.knowstack.com/nscollectionview-sample-code/를 참고했다. –