#swift #view #navigation #swiftui
#swift #Вид #навигация #swiftui
Вопрос:
Я хотел бы иметь возможность перемещаться между представлениями с помощью 2 стрелок и иметь индикатор того, на какой странице находится пользователь.
В настоящее время индикатор страницы несколько точен (корректен при загрузке на новую страницу), однако я не могу заставить навигационную ссылку работать из этой структуры.
Функция находится в своем собственном файле и вызывается в другом представлении с помощью Foo(progress: Index)
var Index : Int = 1
struct PageCounter: View {
let progress: Int
init(progress: Int) {
self.progress = progress
}
var body: some View {
HStack {
Button(action: { if Index > 1 { Index -= 1 } } ) {
Image(systemName: "lessthan") }
Spacer()
ForEach(1 ..< 8) {value in
if value-1 < self.progress {
Image(systemName: "circle.fill")
} else {
Image(systemName: "circle")
}
}
Spacer()
NavigationLink(destination: getDestination()) {
Button(action: { if Index < 8 { Index = 1 } } ) {
Image(systemName: "greaterthan") } }
}
}
func getDestination() -> AnyView {
if index == 1 {
return AnyView(View1())
} else if Index == 2 {
return AnyView(View2())
} else if Index == 3 {
return AnyView(View3())
} else if Index == 4 {
return AnyView(View4())
} else {
return AnyView(MainPage())
}
}
}
Индикатор выглядит примерно так, однако нажатие стрелок в настоящее время, похоже, ничего не делает
Как я могу заставить это правильно работать? И есть ли лучший способ добиться этого, чем я сейчас пытаюсь?
Ответ №1:
Создание состояний progress и index struct, а затем использование навигационного представления с тегом и селектором с использованием состояний позволяет правильно перемещаться, а не зависать.
struct PageCounter: View {
@State private var progress: Int?
@State private var index: Int = 1
var body: some View {
HStack {
NavigationLink(destination: getDestination(), tag: index, selection: $progress) {
Button(action: { if index > 1 {
self.progress -= 1
self.progress = self.index } } ) {
Image(systemName: "lessthan") }
Создание состояний переменных и использование тегов и аргументов выбора навигационной ссылки позволяют адаптивно обновлять ее на основе значений, а не полагаться на внешнее обновление перед принятием мер