0

我将 Cappuccino 0.9.6 与 XcodeCapp 一起使用。我有一个 CPCollectionView 填充了 CPImageView 子类型项 (ThumbnailView)。现在我希望这些项目是可拖动的。

我将Scrapbook #2 - Drag and Drop示例中的说明改编为我的 xcode 界面(拖动目标尚未实现),但是,这些项目不可选择,更不用说可拖动了。关于出了什么问题的任何想法?

应用控制器.j

@import <Foundation/CPObject.j>
@import "MediaController.j"


@implementation AppController : CPObject
{
    CPWindow     theWindow; //this "outlet" is connected automatically by the Cib
    @outlet MediaController    mediaController;  // connected to AppController
}

- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{

    // load media
    [mediaController loadMedia];
}

- (void)awakeFromCib
{
    [theWindow setFullPlatformWindow:YES];
}

@end

媒体控制器.j

ThumbnailDragType = @"ThumbnailDragType";

@implementation MediaController : CPObject
{
    CPArray   images;

    // outlets
    @outlet CPCollectionView thumbnailCollectionView; // connected to CPCollectionView in interface builder
}

- (id)loadMedia
{   
    [thumbnailCollectionView setAutoresizingMask:CPViewWidthSizable];
    [thumbnailCollectionView setMinItemSize:CGSizeMake(150, 150)];
    [thumbnailCollectionView setMaxItemSize:CGSizeMake(150, 150)];
    [thumbnailCollectionView setDelegate:self];

    var itemPrototype = [[CPCollectionViewItem alloc] init];

    [itemPrototype setView:[[ThumbnailView alloc] initWithFrame:CGRectMakeZero()]];

    [thumbnailCollectionView setItemPrototype:itemPrototype];

    image1 = [[CPImage alloc] initWithContentsOfFile:@"Resources/sample.jpg" size:CGSizeMake(500.0, 430.0)];
    [image1 setName:'bla'];
    image2 = [[CPImage alloc] initWithContentsOfFile:@"Resources/sample2.jpg" size:CGSizeMake(500.0, 389.0)];
    [image2 setName:'asdfsadfdf'];
    image3 = [[CPImage alloc] initWithContentsOfFile:@"Resources/sample3.jpg" size:CGSizeMake(413.0, 400.0)];
    [image3 setName:'asdfadsggewa'];
    image4 = [[CPImage alloc] initWithContentsOfFile:@"Resources/sample4.jpg" size:CGSizeMake(500.0, 375.0)];
    [image4 setName:'aisdfiojf'];
    image5 = [[CPImage alloc] initWithContentsOfFile:@"Resources/sample5.jpg" size:CGSizeMake(500.0, 375.0)];
    [image5 setName:'oiajdf'];
    image6 = [[CPImage alloc] initWithContentsOfFile:@"Resources/sample6.jpg" size:CGSizeMake(500.0, 375.0)];
    [image6 setName:'aidsoifsd'];

    images = [image1, image2, image3, image4, image5, image6];

    [thumbnailCollectionView setContent:images];

    return self;
}

- (CPData)collectionView:(CPCollectionView)aCollectionView dataForItemsAtIndexes:(CPIndexSet)indices forType:(CPString)aType
{
    return [CPKeyedArchiver archivedDataWithRootObject:[images objectAtIndex:[indices firstIndex]]];
}

- (CPArray)collectionView:(CPCollectionView)aCollectionView dragTypesForItemsAtIndexes:(CPIndexSet)indices
{
    return [ThumbnailDragType];
}

@end





@implementation ThumbnailView : CPImageView
{
    CPImageView imageView;
    CPView labelView;
    CPTextField label;
}

- (void)setSelected:(BOOL)isSelected
{
    [self setBackgroundColor:isSelected ? [CPColor grayColor] : nil];
}

- (void)setRepresentedObject:(id)anObject
{
    if (!imageView)
    {
        var frame = CGRectInset([self bounds], 5.0, 5.0);

        // make imageView
        imageView = [[CPImageView alloc] initWithFrame:frame];
        [imageView setImageScaling:CPScaleProportionally];
        [imageView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];

        [self addSubview:imageView];

        // make label view
        labelView = [[CPView alloc] initWithFrame:CGRectMake(
            5.0,
            125.0,
            140.0,
            20.0
        )];
        [labelView setBackgroundColor:[CPColor blackColor]];

        // make label
        label = [[CPTextField alloc] initWithFrame:CGRectInset([labelView bounds], 3.0, 3.0)];
        [label setTextColor:[CPColor whiteColor]];
        [labelView addSubview:label];

        [self addSubview:labelView];
    }

    [imageView setImage:anObject];
    [label setStringValue:[anObject name]];
}

@end
4

1 回答 1

0

在 Xcode 中,确保集合视图被标记为“可选”(见附图)。

在此处输入图像描述

于 2013-10-14T14:47:39.147 回答