SwiftUI - 如何获取轮播中当前显示的项目索引?
SwiftUI - How to get currently displayed item index in a carousel?
我正在尝试重新创建与 Carrot Weather Layout 修改器相同的视图,即按钮顶部的旋转木马,当按下该按钮时,将打开当前显示的项目的详细视图。
您将采用什么方法来实现这一目标?我试过使用 onTapesture 和 onDragGesture 来存储附加到项目的值,但这似乎不起作用。
感谢您的帮助!
一种方法可能是使用 TabView 的选择 属性,并使用 .tag(index) 标记 TabView 内的每个视图,其中 index 是一个 int。然后,您可以使用绑定到选择的状态变量 属性 来了解选择了哪个视图。
import SwiftUI
struct SwiftUIView: View {
@State var tabSelected = 0
@State var weatherText = "is..."
var body: some View {
VStack {
Spacer()
Text("Weather: \(weatherText)")
.font(.largeTitle)
.bold()
Spacer()
TabView (selection: $tabSelected) {
// Add each of the carousel views, e.g.images
// First view in carousel
Image(systemName:"sun.max")
.resizable()
.scaledToFit()
.tag(1)
// Second view in carousel
Image(systemName:"cloud.rain")
.resizable()
.scaledToFit()
.tag(2)
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic))
.indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))
Spacer()
Button("GET WEATHER..") {
if(tabSelected == 1)
{
weatherText = "It's sunny"
}
else if(tabSelected == 2)
{
weatherText = "It's raining"
}
}
Spacer()
}
}
}
我正在尝试重新创建与 Carrot Weather Layout 修改器相同的视图,即按钮顶部的旋转木马,当按下该按钮时,将打开当前显示的项目的详细视图。
您将采用什么方法来实现这一目标?我试过使用 onTapesture 和 onDragGesture 来存储附加到项目的值,但这似乎不起作用。
感谢您的帮助!
一种方法可能是使用 TabView 的选择 属性,并使用 .tag(index) 标记 TabView 内的每个视图,其中 index 是一个 int。然后,您可以使用绑定到选择的状态变量 属性 来了解选择了哪个视图。
import SwiftUI
struct SwiftUIView: View {
@State var tabSelected = 0
@State var weatherText = "is..."
var body: some View {
VStack {
Spacer()
Text("Weather: \(weatherText)")
.font(.largeTitle)
.bold()
Spacer()
TabView (selection: $tabSelected) {
// Add each of the carousel views, e.g.images
// First view in carousel
Image(systemName:"sun.max")
.resizable()
.scaledToFit()
.tag(1)
// Second view in carousel
Image(systemName:"cloud.rain")
.resizable()
.scaledToFit()
.tag(2)
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic))
.indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))
Spacer()
Button("GET WEATHER..") {
if(tabSelected == 1)
{
weatherText = "It's sunny"
}
else if(tabSelected == 2)
{
weatherText = "It's raining"
}
}
Spacer()
}
}
}