朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら
SwiftUI sheetの使い方





SwiftUIでSheetを使いたい場合の一例です。
下のサンプルコードは、実際のコードを使っています。
sheetの部分は下の方にあるのですが、sheetの表示・非表示はState変数isTimelineを使って、それをオンオフすることによって表示を切り替えています。
では、sheetはどこの部分につけるかというと、このサンプルでは、body内のルートにあるVStackに付けています。
また、sheetを非表示にする為に、sheet内にボタンを設置し、ボタンをタップすることによって、変数isTimelineをオフにしてsheetを非表示にしています。


SomeView.swift

    ViewData["atmark"]State var isTimeline = false  //シートを表示・日表示する為のオンオフ用の変数

    var body: some View {
        VStack{
            Text("長押しで最近10件のツイートが、タップ1回でTwitterが、2回で役所のホームページが開きます")
            Divider()
            Text(self.pref).font(.title)
            List(TwitterList.getData(self.pref)) {
            item in
            HStack {
                Text(item.city)
                VStack {
                    Text("Twitter:" + item.twitter)
                    Text(item.note)
                }.gesture(TapGesture(count:2)
                            .onEnded{ (val) in
                                if item.note.contains("http") {
                                    let text: String = item.note
                                    debugPrint(text)
                                    let url = URL(string: text)
                                    if UIApplication.shared.canOpenURL(url!) {
                                        UIApplication.shared.open(url!, options:[:], completionHandler: nil)
                                    }
                                }

                            })
                
                .gesture(TapGesture(count: 1)
                            .onEnded{ val in
                                if item.twitter.contains("ViewData["atmark"]") {
                                    let text: String = "https://twitter.com/" + item.twitter.suffix(item.twitter.count - 1)
                                    let url = URL(string: text)
                                    if UIApplication.shared.canOpenURL(url!) {
                                        UIApplication.shared.open(url!, options:[:], completionHandler: nil)
                                    }
                                }

                            })
                .onLongPressGesture {
                    if item.twitter.contains("ViewData["atmark"]") {
                    swifter.getTimeline(for: .screenName(item.twitter),count: 10, success: {json in //print(self.json);
                        print(json[0])
                        self.json = json
                    },failure: {error in print(error)})
                    
                    self.isTimeline.toggle()
                    }
                }
            }.font(.subheadline)
        }
        }
        .sheet(isPresented: $isTimeline, content: {  //sheetはここです。変数isTimelineをオンオフする事によって表示したり非表示にしたりします。
            VStack{
            Button(action: {self.isTimeline.toggle()}, label: {  //ボタンを設置して変数isTimelineをオフにしています。
                Text("戻る")
            }
            )
                             
                             }
                             }
    }
                             

    








良いやや良い普通やや悪い悪い

投稿日時評価コメント