Обновление SwiftUI PageView со стороны

У меня есть PageStyle TabView, и я хочу обновить текст, который находится за его пределами. Я использовал onAppear, чтобы получить событие смены страницы, и сначала выглядит хорошо, если я прокручиваю вперед, но как только я возвращаюсь назад, некоторые onAppear пропускаются.

Это правильный способ сделать это. Возможно ли это?

struct PageView: View {
    
    @State var title: String = "hello"
    
    var body: some View {
        
        VStack {
            Text(self.title)
            TabView {
                ForEach(0..<100) { i in
                    Text("\(i)").onAppear {
                        self.title = ("TITLE = \(i)")
                    }
                }
            }
            .tabViewStyle(PageTabViewStyle())
        }
    }
}

1 ответ

Решение

Вы можете сделать это, используя TabView(selection: и tag модификатор на Text элементы, как показано ниже (протестировано с Xcode 12.1 / iOS 14.1)

var body: some View {
    VStack {
        Text(self.title)
        TabView(selection: $title){           // << here !!
            ForEach(0..<100) { i in
                Text("\(i)")
                   .tag(String(i))            // << here !!
            }
        }
        .tabViewStyle(PageTabViewStyle())
    }
}
Другие вопросы по тегам