Я пытаюсь добавить 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, а не только его растровое представление (слой). Любая помощь очень ценится!
Добавление слоя кнопки на другой уровень не будет работать, потому что обработка событий происходит на уровне NSView. – jtbandes
Да, но даже изображение кнопки не появляется, не говоря уже о каком-либо обращении, конечно –