gpt4 book ai didi

objective-c - 在 Cocoa 中使用自定义模式表时遇到问题

转载 作者:太空狗 更新时间:2023-10-30 03:56:51 27 4
gpt4 key购买 nike

我的目标:在应用程序通过冗长的循环运行时显示具有确定的 NSProgressIndicator 的自定义工作表。我希望工作表是应用程序模式的,而不是文档模式的。用户无法关闭模态表。他们必须等待应用程序完成循环处理。

问题:我无法将自定义工作表附加到窗口。它显示为一个单独的窗口,缺少窗口标题栏(作为工作表)。此外,当循环结束时,工作表不会被释放(不会关闭)。

我有 2 个单独的 nib 文件用于工作表和主应用程序窗口,还有 2 个 Controller 类用于每个窗口。

相关信息如下:自定义工作表的 Controller 实现:

@implementation ProgressSheetController //subclass of NSPanel

-(void)showProgressSheet:(NSWindow *)window
{
//progressPanel is an IBOutlet to the NSPanel
if(!progressPanel)
[NSBundle loadNibNamed:@"ProgressPanel" owner:self];

[NSApp beginSheet: progressPanel
modalForWindow: window
modalDelegate: nil
didEndSelector: nil
contextInfo: nil];

//modalSession is an instance variable
modalSession = [NSApp beginModalSessionForWindow:progressPanel];

[NSApp runModalSession:modalSession];
}

-(void)removeProgressSheet
{
[NSApp endModalSession:modalSession];
[NSApp endSheet:progressPanel];
[progressPanel orderOut:nil];
}

//some other methods
@end

主应用程序窗口的实现。 testFiles 方法是一个连接到按钮的 IBAction。

@implementation MainWindowViewController //subclass of NSObject

-(IBAction)testFiles:(id)sender;
{
//filesToTest is a mutable array instance variable
int count = [filesToTest count];

float progressIncrement = 100.0 / count;

ProgressSheetController *modalProgressSheet = [[ProgressSheetController alloc] init];
[modalProgressSheet showProgressSheet:[NSApp mainWindow]];

int i,
for(i=0; i<count; i++)
{
//do some stuff with the object at index i in the filesToTest array

//this method I didn't show in ProgressSheetController.m but I think it's self explanatory
[modalProgressSheet incrementProgressBarBy:progressIncrement];
}
//tear down the custom progress sheet
[modalProgressSheet removeProgressSheet];
[modalProgressSheet release];
}
@end

一个想法:我的子类化是否正确?我应该改用 NSWindowController 吗?预先感谢您的帮助!

最佳答案

找到 this gem做一些谷歌搜索。我的 NSPanel 在 Interface Builder 中的行为设置为“启动时可见”,这是使用 IB 时新窗口的默认行为。发生的事情是在加载 nib 后,窗口在 [NSApp beginSheet:...] 之前可见。因此,取消选中“启动时可见”选项解决了我的问题,现在一张工作表出现连接到我想要的窗口。

关于objective-c - 在 Cocoa 中使用自定义模式表时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4071839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com