前提
List { ForEach(self.threads, id: \.objectId) { thread in NavigationLink(destination: ThreadView(thread: thread)) { ThreadListRow(thread: thread) }
表示されているリストをクリックすると
ぐるぐると回るインジゲーターを表示させたいのですが、
表示されているリストをクリックすると
動作も重く、インジゲーターも表示されません。
実現したいこと
表示されているリストをクリックすると、
画面遷移の際、
インジゲーターを表示させたい。
該当のソースコード
Swift
1// 2// ThreadListView.swift 3// forum 4// 5// Created by Atsushi on 2021/08/06. 6// 7 8import SwiftUI 9import NCMB 10 11struct ThreadListView: View { 12 @State private var threads: [NCMBObject] = [] 13 @State private var showModal = false 14 @State private var showAlert = false 15 @State var isPresentedProgressView = false 16 var body: some View { 17 NavigationView { 18 List { 19 ForEach(self.threads, id: \.objectId) { thread in 20 NavigationLink(destination: ThreadView(thread: thread)) { 21 ThreadListRow(thread: thread) 22 } 23 } 24 .onDelete(perform: delete) 25 } 26 .navigationBarTitle("掲示板", displayMode: .inline) 27 .toolbar { 28 ToolbarItem(placement: .navigationBarTrailing) { 29 Button { 30 showModal.toggle() 31 } label: { 32 Image(systemName: "plus") 33 .resizable() 34 .padding(6) 35 .frame(width: 24, height: 24) 36 .foregroundColor(.blue) 37 } 38 } 39 } 40 } 41 .onAppear { 42 DispatchQueue.main.asyncAfter(deadline: .now()+0.3) { 43 getThread() 44 } 45 } 46 .sheet(isPresented: $showModal) { 47 AddThreadView() 48 } 49 .onChange(of: showModal, perform: { _ in 50 if !showModal { 51 getThread() 52 } 53 }) 54 .alert(isPresented: $showAlert, content: { 55 Alert(title: Text("削除に失敗しました。権限がないようです。")) 56 }) 57 } 58 59 private func manageProgress() { 60 // ProgressView 表示 61 isPresentedProgressView = true 62 // 3秒後に非表示に 63 DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) { 64 self.isPresentedProgressView = false 65 } 66 } 67 68 private func getThread() { 69 let query = NCMBQuery.getQuery(className: "Thread") 70 let results = query.find() 71 switch results { 72 case let .success(ary): 73 threads = ary 74 case .failure(_): break 75 } 76 } 77 78 private func delete(at offsets: IndexSet) { 79 let thread = self.threads[Array(offsets)[0]] as NCMBObject 80 let results = thread.delete() 81 switch results { 82 case .success(_): 83 getThread() 84 case .failure(_): 85 showAlert = true 86 } 87 } 88} 89
試したこと
Swift
1NavigationView { 2 List { 3 ForEach(self.threads, id: \.objectId) { thread in 4 NavigationLink(destination: ThreadView(thread: thread)) { 5 ThreadListRow(thread: thread) 6 } 7 }
の下に、
Swift
1;if isPresentedProgressView { 2 Color.gray.opacity(0.5) 3 ProgressView("読み込み中") 4 }
を
Swift
1NavigationView { 2 List { 3 ForEach(self.threads, id: \.objectId) { thread in 4 NavigationLink(destination: ThreadView(thread: thread)) { 5 ThreadListRow(thread: thread) 6 };if isPresentedProgressView { 7 Color.gray.opacity(0.5) 8 ProgressView("読み込み中") 9 } 10 } 11
のように記述したのですが、
ProgressView("読み込み中")は表示されません。
補足情報(FW/ツールのバージョンなど)
重ねての質問で
大変申し訳ないのですが
こちらも以前の質問同様、同じ方法で解決できると思っていましたが、
解決できませんでした。。。
何度も申し訳ありませんが、
ヒントやアドバイスいただけますと大変嬉しいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー