2013-09-05 7 views
2

Я хочу настроить IKImageBrowserView, чтобы добавить NSButton или другой элемент управления в ячейку IKImageBrowserView. Я попытался вырезать класс IKBrowserViewCell, но я не понял, как и где я добавляю NSbutton, чтобы он отображался на IKBrowserViewItem. Вот код, который я пробовал до сих пор.Как настроить IKImageBrowserView для добавления NSButton для каждого элемента?

#import "ImageBrowserView.h" 
#import "ImageBrowserCell.h" 

- (IKImageBrowserCell *) newCellForRepresentedItem:(id) cell 
{ 
    return [[ImageBrowserCell alloc] init]; 
} 

В ячейке класса

- (CALayer *) layerForType:(NSString*) type 
{ 
    CGColorRef color; 

    //retrieve some usefull rects 
    NSRect frame = [self frame]; 
    NSRect imageFrame = [self imageFrame]; 
    NSRect relativeImageFrame = NSMakeRect(imageFrame.origin.x - frame.origin.x, imageFrame.origin.y - frame.origin.y, imageFrame.size.width, imageFrame.size.height); 

// place holder layer 
    if(type == IKImageBrowserCellPlaceHolderLayer){ 
     //create a place holder layer 
     CALayer *layer = [CALayer layer]; 
     layer.frame = CGRectMake(0, 0, frame.size.width, frame.size.height); 

     CALayer *placeHolderLayer = [CALayer layer]; 
     placeHolderLayer.frame = *(CGRect*) &relativeImageFrame; 

     float fillComponents[4] = {1.0, 1.0, 1.0, 0.3}; 
     float strokeComponents[4] = {1.0, 1.0, 1.0, 0.9}; 
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

     //set a background color 
     color = CGColorCreate(colorSpace, fillComponents); 
     [placeHolderLayer setBackgroundColor:color]; 
     CFRelease(color); 

     //set a stroke color 
     color = CGColorCreate(colorSpace, strokeComponents); 
     [placeHolderLayer setBorderColor:color]; 
     CFRelease(color); 

     [placeHolderLayer setBorderWidth:2.0]; 
     [placeHolderLayer setCornerRadius:10]; 
     CFRelease(colorSpace); 

     [layer addSublayer:placeHolderLayer]; 

     return layer; 
    } 
return nil; 
} 

Этот класс клеток есть способ вернуть кадр различного контроля IKImageBrowserCell и не позволяет добавлять в подвид. Я не получил, где я выделил свой NSButton, чтобы потом показать его на элементе. Пожалуйста, помогите мне. Я уже потратил около 1 дня на это. Любая помощь будет заметна. Thanks

ответ

1

Вы направляетесь в правильном направлении. Вам нужно проверить тип и добавить кнопки на передний план. Вот код из существующего проекта.

- (CALayer *)layerForType:(NSString *)type 
{ 
    if (type == IKImageBrowserCellBackgroundLayer) { 
     CALayer *layer = [CALayer layer]; 
     NSRect rect = [self frame]; 
     layer.frame = rect; 
     _frameBg = rect; 
     CGFloat cellSize = rect.size.height; 

     SSLayerBackground *bgLayer = [SSLayerBackground layer]; 
     [layer addSublayer:bgLayer]; 
     [bgLayer setFrame:rect]; 
     bgLayer.position = NSMakePoint(rect.size.width/2.0, rect.size.height/2.0); 
     [bgLayer setNeedsDisplay]; 

     /* Create background layer here */ 

     return layer; 
    } else if (type == IKImageBrowserCellForegroundLayer) { 
     CALayer *layer = [CALayer layer]; 
     NSRect rect = [self frame]; 
     layer.frame = rect; 
     CGFloat cellSize = rect.size.width; 


     /* Add your buttons to this layer */ 

     return layer; 
    } else if (type == IKImageBrowserCellSelectionLayer) { 
     CALayer *layer = [CALayer layer]; 
     NSRect rect = [self frame]; 
     layer.frame = rect; 
     CGFloat cellSize = rect.size.height; 

     /* Do selection layer stuff here */ 

     return layer; 
    } 
    //return nil; 
    return [super layerForType:type]; 
} 
+0

Это их другой способ добавить кнопку на слое forground, потому что, когда я пытаюсь добавить кнопку в ваш код, ничего не отображается на IKIMageBrowserItem. if (type == IKImageBrowserCellForegroundLayer) { NSButton * btn = [[NSButton alloc] initWithFrame: CGRectMake (0, 0, rect.size.width, 30)]; [btn setTitle: @ "Button"]; [layer addSublayer: [btn layer]]; /* Добавьте свои кнопки на этот слой */ } – Surjeet