我正在使用此代码显示一个面板:
- (void)displayPanelWithView:(NSView *)view andTitle:(NSString *)title {
[panel setTitle:title];
if ([windows count] < 1) {
[panel setContentSize:[view frame].size];
[panel setContentView:view];
[panel center];
[panel makeKeyAndOrderFront:nil];
}
else {
[panel setContentSize:[view frame].size];
[panel setContentView:view];
[NSApp beginSheet:panel modalForWindow:[windows objectAtIndex:0] modalDelegate:self didEndSelector:nil contextInfo:NULL];
}
}
panel
是IBOutlet(它在IB中实例化)。它是NSPanel的子类。
windows
是一个窗口数组。如果没有窗口,则面板显示为新窗口。
问题
当我显示具有特定视图的面板,并且windows
不为空时,面板显示为工作表。第一次发生这种情况时,始终存在偏移。以下是第一次调用该方法时的屏幕截图,以及第二次调用该方法时的屏幕截图(windows
都不为空):
如果我使用此错误可能会消失:
[panel setStyleMask:NSBorderlessWindowMask];
在这种情况下,尺寸是正确的,但是纸张不再聚焦并保持不聚焦(因此上面屏幕截图中的蓝色按钮始终为白色)。 我该怎么做才能让每次都能正确显示工作表?第一次不会在下次发生时会发生什么?
答案 0 :(得分:0)
我设法通过使用此代码来解决问题:
- (void)displayPanelWithView:(NSView *)view andTitle:(NSString *)title {
[panel setTitle:title];
if (![defaults floatForKey:@"SS_Interface_Mode"] == 0 || [windows count] < 1) {
[panel setContentSize:[view frame].size];
[[panel contentView] addSubview:view];
[panel center];
[panel makeKeyAndOrderFront:nil];
}
else {
[panel setContentSize:[view frame].size];
[[panel contentView] addSubview:view];
[NSApp beginSheet:panel modalForWindow:[windows objectAtIndex:0] modalDelegate:self didEndSelector:nil contextInfo:NULL];
}
}
- (IBAction)endSheet:(id)sender {
[NSApp endSheet:panel];
[panel orderOut:nil];
for (NSView *view in [[panel contentView] subviews])
[view removeFromSuperview];
}
如您所见,我将视图添加到面板的当前内容视图,而不是将其指定为面板的新内容视图。