Swift 通过@Published变量更改选项卡视图(选择:)
我有一个带有标记项的选项卡视图Swift 通过@Published变量更改选项卡视图(选择:),swift,swiftui,Swift,Swiftui,我有一个带有标记项的选项卡视图 struct ContentView: View { @ObservedObject var tabController = TabController() var body: some View { TabView(selection: $tabController.selectedTab) { HomeView() .tabItem{ Image(systemName: "ho
struct ContentView: View {
@ObservedObject var tabController = TabController()
var body: some View {
TabView(selection: $tabController.selectedTab) {
HomeView()
.tabItem{
Image(systemName: "house.fill")
.font(.system(size: 20))
Text("Home")
}.tag(0)
...
}
我有一个observateObject
,它有一个@Published selectedTab
变量和一个更改它的函数
调用该函数时,它会正确打印要切换到的选项卡的索引,但该选项卡不会切换。有人知道为什么吗
class TabController: ObservableObject {
@Published var selectedTab = 3
func changeTab(tabIndex: Int) {
self.selectedTab = tabIndex
print(selectedTab)
}
}
除了changeTab(tabIndex:)
之外,我还尝试直接更改selectedTab
编辑:我调用changeTab(tabIndex:)如下:
struct DetailsView: View {
@ObservedObject var tabController = TabController()
var body: some View {
ScrollView {
VStack(alignment: .leading, spacing: 0) {
Button(action: {self.tabController.changeTab(tabIndex: 2)}) {
HStack {
Image(systemName: "bubble.left.fill")
.buttonIconModifier()
Text("Switch Tab")
}
}.modifier(ButtonStyle())
}
}
}
}
这是一个错误
struct ContentView: View {
@ObservedObject var tabController = TabController() // << 1st controller
struct ContentView:View{
@ObservedObject var tabController=tabController()//就我所能复制的代码而言,在这里一切都很好。使用Xcode 11.4/iOS 13.4进行测试。奇怪。上面我唯一没有指定的是如何调用changeTab-如下所示:@ObservedObject var tabController=tabController()按钮(操作:{self.tabController.changeTab(tabIndex:2)}{HStack{Image(系统名:“bubble.left.fill”).buttonicomodifier()文本(“按钮文本”)}
如果你的按钮在主体中,那么我也会这样做。你能从调用函数的位置/方式显示另一个视图的代码吗?以及它与发布的ContentView
的关系吗?我在上面添加了它,谢谢!@AsperiSo当按钮在ContentView中(你的TestSwitchTabOnPublished)时,这对我也有效但是我从另一个角度调用这个函数,它不起作用。谢谢,我们似乎缩小了范围。谢谢,这就是解决方案!
struct DetailsView: View {
@ObservedObject var tabController = TabController() // << 2nd controller