2015-02-04 3 views
0

Я пытаюсь добавить NSButton на слой внутри объекта IKImageBrowserCell. Я нашел this сообщение полезное, но оно не попадает в суть. Я уже пробовал это:Как добавить NSButton в CALayer?

- (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); 

    /* foreground layer */ 
    if(type == IKImageBrowserCellForegroundLayer){ 
     //no foreground layer on place holders 
     if([self cellState] != IKImageStateReady) 
      return nil; 

     //create a foreground layer that will contain several childs layer 
     CALayer *layer = [CALayer layer]; 
     layer.frame = CGRectMake(0, 0, frame.size.width, frame.size.height); 


     //add a checkbox to tell whether to upload this one or not 
     NSRect checkFrame = NSMakeRect((frame.size.width/2)-5 , frame.size.height - 19, 18,18); 
     NSButton *uploadCheckBox = [[NSButton alloc] initWithFrame:checkFrame]; 
     [uploadCheckBox setButtonType:NSSwitchButton]; 
     [layer addSublayer :[uploadCheckBox layer]]; 

     return layer; 
    } 
    //(...) 
    return nil; 
} 

Но, к сожалению, кнопка не появляется на слое. Я думаю, что размещение кнопки в порядке, так как оно основано на примере кода из приложения Apple. У меня такое ощущение, что эта строка неверна: layer addSublayer :[uploadCheckBox layer]];, так как я должен добавлять весь NSButton, а не только его растровое представление (слой). Любая помощь очень ценится!

+0

Добавление слоя кнопки на другой уровень не будет работать, потому что обработка событий происходит на уровне NSView. – jtbandes

+0

Да, но даже изображение кнопки не появляется, не говоря уже о каком-либо обращении, конечно –

ответ

0

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

Смежные вопросы