標籤:
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的使用