繁体   English   中英

如何关闭NSOpenPanel

[英]How to close NSOpenPanel

我需要打开一个文本文件并处理其中的每一行。 我无法关闭NSOpenPanel,因此可以继续进行处理。 下面包含了我几年前在这里找到的代码,我希望有人发现了另一种方法。 NSSavePanel会按预期执行,在单击按钮时将关闭。

- (IBAction)loadSettings:(id)sender
{
    NSString *t = [self splitSettings:@"k"];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC / 100), dispatch_get_main_queue(), ^(void){
        // some other method calls here
    });    
    int i = 4;   // so I have a breakpoint
}

- (NSString*)splitSettings:(NSString*)inFile
{
    NSOpenPanel *zOpenPanel = [NSOpenPanel openPanel];
    NSArray *arrayOfExtensions = [NSArray arrayWithObject:@"txt"];
    [zOpenPanel setAllowedFileTypes:arrayOfExtensions];
    NSInteger intResult = [zOpenPanel runModal];
    if (intResult == NSFileHandlingPanelCancelButton) {
        NSLog(@"readUsingOpenPanel cancelled");
        return @"Cancelled";
    }
    NSURL *zUrl = [zOpenPanel URL];
    // read the file
    NSString * zStr = [NSString stringWithContentsOfURL:zUrl                                                                                             encoding:NSASCIIStringEncoding                                                                                                 error:NULL];
    return zStr;
}

在这里查看我的示例项目,我曾经弄清楚过这些东西,CocoaSheets 但是请注意,这是针对使用任何模式表的一般情况,而不仅仅是NSOpenPanel。 也许有人会发布特定于NSOpenPanel的案例,无论如何这对我希望有所帮助。

使用以下命令启动模态窗口,

[[self window] beginSheet:self.sheetWindowController.window completionHandler:^(NSModalResponse returnCode) {

    switch (returnCode) {

        case NSModalResponseCancel:
            NSLog(@"%@", @"NSModalResponseCancel");
            break;

        case NSModalResponseOK:
            NSLog(@"%@", @"NSModalResponseOK");
            break;

        default:
            break;
}}];

然后,将“取消”和“确定”按钮连接到以下操作方法。 请注意,您使用sheetParent结束了工作表。

- (IBAction)cancelButtonAction:(id)sender {
    [[[self window] sheetParent] endSheet:self.window returnCode:NSModalResponseCancel];
}

- (IBAction)OKButtonAction:(id)sender {
    [[[self window] sheetParent] endSheet:self.window returnCode:NSModalResponseOK];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM