Mac OS 中NSSavePanel以及NSOpenPanel的使用

來源:互聯網
上載者:User

標籤:

SSavePanel

最近需要儲存文檔到本地,因為不是Pictures、Music或者Movies,不能使用這幾個許可權,因此使用NSSavePanel讓使用者自訂儲存路徑。以下是代碼

 1     NSSavePanel*    panel = [NSSavePanel savePanel]; 2     [panel setNameFieldStringValue:@"Untitle.onecodego"]; 3     [panel setMessage:@"Choose the path to save the document"]; 4     [panel setAllowsOtherFileTypes:YES]; 5     [panel setAllowedFileTypes:@[@"onecodego"]]; 6     [panel setExtensionHidden:YES]; 7     [panel setCanCreateDirectories:YES]; 8     [panel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){ 9         if (result == NSFileHandlingPanelOKButton)10         {11             NSString *path = [[panel URL] path];12             [@"onecodego" writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];13         }14     }];

-1 第2行代碼是設定預設的檔案名稱

-2 第3行代碼是設定提示資訊

-3 第5行代碼是設定允許的檔案類型

-4 第6行代碼是隱藏副檔名

-5 第7行代碼是設定可以建立檔案

-6 第8 - 14行代碼是運行視窗

-7 第9行代碼是判斷使用者點擊的是不是OK按鈕(預設title好像是Save)

-8 第11行代碼是取出使用者選擇儲存的路徑

需要注意的是設定檔案名稱的時候需要帶上副檔名(如樣本中第2行),需要設定允許的檔案類型(如樣本中第5行),並設定隱藏副檔名(如樣本中第6行)以及可建立檔案(如樣本中第7行)。設定這幾個屬性之後,運行範例程式碼:

此時修改文檔名字(如修改為onecodego),選擇儲存路徑為Documents,點擊save。

開啟Finder,在Documents中就可以找到onecodego.onecodego。

需要注意的是這樣儲存的文檔只能在當此開啟的時候讀寫,也就是說當退出軟體或者重啟電腦對該路徑檔案的讀寫權限就沒有了。

 

NSSavePanel*    panel = [NSSavePanel savePanel];    NSView *viewExt = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 180, 40)];        NSTextField *labExt = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 10, 80, 20)];                [labExt setBordered:NO];        [labExt setDrawsBackground:NO];        labExt.stringValue = @"Image type: ";                NSComboBox *cbExt = [[NSComboBox alloc] initWithFrame:NSMakeRect(80, 8, 100, 25)];        [cbExt addItemsWithObjectValues:@[@".bmp", @".jpg", @".png", @".tif"]];        [viewExt addSubview:labExt];        [viewExt addSubview:cbExt];        [panel setAccessoryView:viewExt];        [panel setNameFieldStringValue:@"Untitle.onecodego"];    [panel setMessage:@"Choose the path to save the document"];    [panel setAllowsOtherFileTypes:YES];    [panel setAllowedFileTypes:@[@"onecodego"]];    [panel setExtensionHidden:YES];    [panel setCanCreateDirectories:YES];    [panel beginSheetModalForWindow:_window completionHandler:^(NSInteger result){        if (result == NSFileHandlingPanelOKButton)        {            NSString *path = [[panel URL] path];            [@"onecodego" writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];        }    }];

 

NSOpenPanel

使用NSOpenPanel開啟使用者選擇的檔案

 1     NSOpenPanel *panel = [NSOpenPanel openPanel]; 2     [panel setDirectory:NSHomeDirectory()];  3     [panel setAllowsMultipleSelection:NO]; 4     [panel setCanChooseDirectories:YES];  5     [panel setCanChooseFiles:YES]; 6     [panel setAllowedFileTypes:@[@"onecodego"]]; 7     [panel setAllowsOtherFileTypes:YES]; 8     if ([panel runModal] == NSOKButton) { 9         NSString *path = [panel.URLs.firstObject path];10         //code11     }

-1 第2行代碼是設定預設的路徑

-2 第3行代碼是設定不允許多選

-3 第4行代碼是設定可以開啟檔案夾

-4 第5行代碼是設定可以選中檔案

-5 第6行代碼是設定可以開啟的檔案類型

-6 第8行代碼是判斷使用者選中的是不是OK按鈕

-7 第9行取出使用者選中的路徑

需要注意的是需要設定允許的檔案類型,如樣本允許的檔案類型為onecodego,因此在NSOpenPanel中只能開啟尾碼為onecodego的檔案,如:

Mac OS 中NSSavePanel以及NSOpenPanel的使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.