【SwiftUI】パネルを利用したファイル保存
2023-02-11
さて、氷翠です。
今回はファイル保存のパネル(ダイアログ)を利用した保存する方法。
それ以外は前の「【Swift】忘れないようにファイル保存の基本」と同じ状態。
iMac M1
メモリ:16GB
MacOS:Ventura 13.1
Xcode:14.2
これを書き込んでいる時にはすでにアプリ自体は1週間を過ぎ、すでにアプリは起動できない状態になっていたがw
今回は、保存自体は前回のものとほぼ同じものだ。なので、その辺は省略。
問題はボタンのアクションの部分だ。
Button("保存") {
let panel = NSSavePanel()
panel.message = "保存するファイル名を入力してください"
panel.directoryURL = URL(fileURLWithPath: "\(NSHomeDirectory())/Desktop")
if panel.runModal() == .OK {
// OKが押されたら実行されるプログラム
fileName = panel.url!
let saveTextModel = saveTextModel()
let result = saveTextModel.write(fileName, c: text)
let alert = NSAlert()
if result {
alert.messageText = "保存完了"
}
else {
alert.messageText = "保存失敗"
}
alert.runModal()
}
}
で、これで全部。さすがSwiftui。これだけで完結できるので、非常に楽です。
パネルに関するクラスは「NSSavePanel()」を利用する。「directoryURL」というパラメータで初期に表示するパスを設定している。
その次が、「runModal()」というメソッドで実行させる。その返り値が「.OK」ならきちんとフォルダが選択されたという証拠になるのでif文で判断させる。
そこで保存するクラスを読み込んで、というよりアクティブにする。で、あとは保存するプロセスを実行していく。その結果を「result」って変数を作ってそこに保存。その結果はBool値でその結果によってメッセージを変化させる。で、「NSAlert()」でアラートをだして完了するという感じ。
完全に表示している部分と計算部分と分けて考えるというSwiftuiの考えもだいぶ慣れてきてはいる。しかしその考え方もなかなか難しいところでもある。
コメントを残す