寫 iOS 和 macOS/OS X 的程式,有許多相同與不同的地方,相同的是程式語言,不同的是元件與資料來源/架構等。由於 iOS 是 sandBox 程式,只能抓取雲端檔案或照片等,但 macOS 是可以開啟一個本機檔案來修改撰寫,這時就需要一個檔案選取器了,但在元件選取器上搜尋了 "FilePicker" 沒有發現相關的資料,上網研究了一下,原來是要用 NSOpenPanel 這個物件來抓取檔案,記錄如下:


原則上,最簡單的設定方式,只要建立後啟動就可以了,以下是它的語法

      NSOpenPanel().begin(completionHandler:(Int) -> Void)

 

語法上,我們看到一個 Colsur 用來處理完成後的事,所以只是要畫面的話,以下的 code 就可以了

        NSOpenPanel().begin { (handler) in

            print(handler)

        }

而回傳的 handler 就是按下去的按鈕,預設的畫面如下
螢幕快照 2017-06-13 下午3.11.46.png

 

若最後按下的是 Cancel ,回傳就是 0,若是 Open 回就是 2

那選取的檔案在那兒?其實是會到物件本身的參數,所以我們要把物件寫成這樣:

 

        let openPanel = NSOpenPanel()

        openPanel.begin { (handler) in

            print(handler)

            if let selectedUrl = openPanel.url{

                print(selectedUrl)

            }

        }

 

我們就可以取得路徑了,由於不一定會選檔案,也許會按取消,所以回傳的 URL 是一個 Optional。

基本上,這樣就可以用了,其他可常見的參數也有很多,:

 

        let openPanel = NSOpenPanel()

 

        openPanel.directoryURL = URL(fileURLWithPath: NSHomeDirectory())

 

        //可設定或回傳開啟檔案的目錄位置, 若要開啟特定位置, 如個人的家目錄

        

        openPanel.allowsMultipleSelection = false

        // 是否可選取多檔,若是,url會回傳到 .urls[]

        

        openPanel.canChooseDirectories = false

        // 是否可選取【目錄】類型

        

        openPanel.allowedFileTypes = ["txt","htm","html"]

        // 限制選取的檔案類型,非這些檔案不得按下 Open

        

        openPanel.begin { (handler) in

            print(handler)

            if let selectedUrl = openPanel.url{

                print(selectedUrl)

            }

        }

 


 

創作者介紹

X Code Objective-C Swift 學習記錄 for iOS & macOS (OS X)

shenfive 發表在 痞客邦 PIXNET 留言(0) 人氣()