Я пытаюсь показать пользовательский NSView поверх другого представления в приложении OS X. Это пользовательский вид. Это просто красная рамка:
@interface HelpBarView : NSView
@end
@implementation HelpBarView
- (id)initWithFrame:(NSRect)frameRect
{
self = [super initWithFrame:frameRect];
if (self)
{
NSLog(@"init");
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
NSLog(@"draw");
[[NSColor redColor] set];
NSRectFill(self.bounds);
}
@end
Чтобы отобразить этот вид поверх другого вида:
HelpBarView* hbv = [[HelpBarView alloc] initWithFrame:NSMakeRect(10, 20, 100, 100)];
[self.view addSubview:hbv];
Это не покажет вид. Но я вижу из журнала, что оба метода вызываются. Также в иерархии представления отладки XCode я вижу, что поле находится перед другим представлением и в правильном положении. Но в реальной программе этого не видно.
Также, если я сделаю это:
[self.view setSubviews:[NSArray arrayWithObject:hbv]];
Затем он будет показан, но все остальные подвиды отсутствуют, так что это не то, что я хочу.
Что мне не хватает? Как я могу показать вид над другим видом?
[NSBezierPath fillRect:self.bounds];
вместоNSRectFill(self.bounds);
? - person Sergey Kalinichenko   schedule 20.11.2014