[M1 Mac, Ventura 13.3.1, Xcode 14.3]
ChatGPTアプリiOS版の製作に着手しました。
取りあえずリクエスト文を入力できるようにしました。メモアプリのコードを一部流用しています。
クリップボードからテキストをペーストできます。macOSなどからOSをまたいでのペーストは次回以降対応するつもりです。
次にこれをAPIに送信してレスポンスを表示するようにします。
2023/7/4追記
TextEditorのタップ時にPasteやSelect Allなどが選択できるため、緑字のペーストボタンは削除しました。
import SwiftUI
struct Draft: View {
@State var text = ""
@FocusState var nameFieldIsForcused: Bool
@Environment(\.managedObjectContext)var viewContext
var interaction: Interaction?
var body: some View {
TextEditor(text:$text)
.frame(minHeight: 0, maxHeight: .infinity) // 行数無制限
.focused($nameFieldIsForcused)
.onAppear{
DispatchQueue.main.asyncAfter(deadline:DispatchTime.now()+0.5){
nameFieldIsForcused = true
}
}
.toolbar{
ToolbarItem(placement:.navigationBarLeading){
if(nameFieldIsForcused){
Button(action:{
pasteText()
}){
Text("ペースト")
.foregroundColor(.green)
}
}
}
ToolbarItem(placement:.navigationBarTrailing){
if(nameFieldIsForcused){
Button(action:{
if interaction != nil{
updateContent(interaction: self.interaction!)
}else{
addContent()
}
}){
Text("完了")
}
}
}
}
}
func updateContent(interaction:Interaction){
interaction.request = text
do{
try viewContext.save()
}catch{
fatalError("セーブに失敗")
}
nameFieldIsForcused = false
}
func addContent(){
let newContent = Interaction(context:viewContext)
newContent.request = text
do{
try viewContext.save()
}catch{
fatalError("セーブに失敗")
}
nameFieldIsForcused = false
}
func pasteText(){
let pasteboard = UIPasteboard.general
if let clipboardString = pasteboard.string {
text += clipboardString
}
}
}
struct Draft_Previews: PreviewProvider {
static var previews: some View {
Draft()
}
}