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("戻る")
}
)
}
}
}
