swiftui - SwiftUI 选项卡视图显示表
问题描述
我是 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")
}
}
}
解决方案
我假设你想要这个(用 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")
}
}
}
推荐阅读
- cordova - 你可以用流星把一个网络应用程序变成一个移动应用程序吗?
- ruby-on-rails - 如何从 angularJS 控制器中访问 rails 实例变量
- powershell - Mailkit - 获取和搜索一段时间后不返回新邮件
- c# - 找不到 ASP.NET CodeDom 提供程序错误
- excel - 在定义的工作表之后将工作表复制到单个文件
- cmake - CMake:如果在第二次运行时未提供,则使用默认值
- azure - 在用户/增量 API 中获取首选数据位置时无法/出错
- jenkins - TFVC 未通过 cmd 显示挂起的更改
- python - 跟踪 Dataframe 中的操作
- opencv - ffmpeg 将可变帧率 .webm 转换为恒定帧率视频