SwiftUI 选项卡视图显示表
Posted
技术标签:
【中文标题】SwiftUI 选项卡视图显示表【英文标题】:SwiftUI tab view display sheet 【发布时间】:2020-09-28 14:13:39 【问题描述】:我是 SwiftUI 的新手,我尝试构建一个选项卡栏,其中包含一个选项卡,该选项卡将返回模式(工作表)但不返回视图。在我尝试之后,我发现有时它会起作用,但有时不会。我想在用户关闭模式后将前一个选项卡项设为选定选项卡。但我找不到什么错误。有人向我解释我的代码有什么问题吗?
import SwiftUI
struct ContentView: View
@State var isPresenting = false
@State private var selectedItem = 1
@State private var oldSelectedItem = 1
var body: some View
TabView(selection: $selectedItem)
Text("1")
.tabItem
Image(systemName: "house")
.tag(1)
.onAppear
self.oldSelectedItem = self.selectedItem
Text("") // I want this to display the sheet.
.tabItem Image(systemName: "plus.circle")
.tag(2)
.onAppear
self.isPresenting = true
self.selectedItem = self.oldSelectedItem
Text("3")
.tabItem
Image(systemName: "calendar")
.tag(3)
.onAppear
self.oldSelectedItem = self.selectedItem
.sheet(isPresented: $isPresenting)
testSheet
.accentColor(Color.orange)
var testSheet : some View
VStack
Text("testing")
【问题讨论】:
【参考方案1】:我假设你想要这个(使用 Xcode 12 / ios 14 测试)
struct ContentView: View
@State var isPresenting = false
@State private var selectedItem = 1
@State private var oldSelectedItem = 1
var body: some View
TabView(selection: $selectedItem)
Text("1")
.tabItem
Image(systemName: "house")
.tag(1)
Text("") // I want this to display the sheet.
.tabItem Image(systemName: "plus.circle")
.tag(2)
Text("3")
.tabItem
Image(systemName: "calendar")
.tag(3)
// .onReceive(Just(selectedItem)) // SwiftUI 1.0 - import Combine for this
.onChange(of: selectedItem) // SwiftUI 2.0 track changes
if 2 == selectedItem
self.isPresenting = true
else
self.oldSelectedItem = $0
.sheet(isPresented: $isPresenting, onDismiss:
self.selectedItem = self.oldSelectedItem
)
testSheet
.accentColor(Color.orange)
var testSheet : some View
VStack
Text("testing")
【讨论】:
它的工作!太感谢了!我还有一个问题,我可以让第二个视图为空而不是Text("")
吗?
哇,唯一正确的答案。其他答案有效,但不是 100%。这工作 100% 感谢以上是关于SwiftUI 选项卡视图显示表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftUI TabView 更多选项卡来阻止它与我选择的选项卡变量混淆
SwiftUI:输入字段键盘动画导致选项卡视图中的其他视图动画
SwiftUI:我可以向 TabView 添加更多视图,然后是选项卡项吗?