当我在 TabView 上快速滑动时如何更改变量

Posted

技术标签:

【中文标题】当我在 TabView 上快速滑动时如何更改变量【英文标题】:How to change variable when I slide on TabView in swift 【发布时间】:2021-03-01 07:38:47 【问题描述】:

我的 TabView 有以下代码:

struct CardList: View 
    var body: some View 
        TabView 
            ForEach (0..<100 ) item in
            CardViewNew()
            
        
        .tabViewStyle(PageTabViewStyle())
        .padding(.vertical, 10)
    

每次当我滑动到 TabView 的下一个视图时,以下变量“i”应该增加 1 以显示我的数组“shuffled_questions”的下一个元素。

struct CardViewNew: View 
    var body: some View 
        Text(shuffled_questions[i])
    

如果有人可以帮助我就好了:)

【问题讨论】:

“我”在哪里声明? 【参考方案1】:

似乎有两种方法可以做到这一点。要回答您最初的问题,您可以使用TabViewselection 绑定来获取一个变量,以便在 TabView 移动时更改:

@State private var tabSelection = 0
    
    var body: some View 
        
        TabView(selection: $tabSelection) 
            ForEach (0..<100 ) item in
                Text("hi")
            
        
        .tabViewStyle(PageTabViewStyle())
        .padding(.vertical, 10)
        Text("\(tabSelection)")
    

但是,在您的情况下,您似乎只想将索引从您的ForEach 作为参数传递给您的CardViewNew

struct ContentView : View 
    var body: some View 
        TabView 
            ForEach (0..<100 ) item in
                CardViewNew(index: item)
            
        
        .tabViewStyle(PageTabViewStyle())
        .padding(.vertical, 10)
    


struct CardViewNew: View 
    var index: Int
    
    var body: some View 
        Text(shuffled_questions[index])
    

【讨论】:

您必须编辑您的CardViewNew,使其看起来像我在其中包含的var index: Int 这个错误现在消失了。但在我的 CardViewNew-Preview 中还有一个:“在调用中缺少参数 'index' 的参数”struct CardViewNew_Previews: PreviewProvider static var previews: some View CardViewNew() 这告诉你,在你的预览中,你还必须定义一个索引。因此,将其更改为 CardViewNew(index: 0) 以进行预览。顺便说一句,如果您将鼠标悬停在该错误上,Xcode 甚至可能会主动为您修复它。

以上是关于当我在 TabView 上快速滑动时如何更改变量的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 滑动 TabView 时如何访问 ScrollViewReader 的代理

使用tabview更改选项卡时如何使SwiftUI中的计时器保持触发

在 SwifUI TabView 中禁用滑动手势

SwiftUI - 如何在修改来自同一结构的状态变量时避免刷新列表

Primefaces tabview:在选项卡更改时设置活动索引

如何更改 JLabel 颜色