Выбор в NavigationLink не работает - PullRequest
2 голосов
/ 03 апреля 2020

У меня есть следующий код для моего iPad приложения:

struct ContentView: View {

    @State var selectionIndex: Int? = nil

    var body: some View {
        NavigationView {
            VStack {
                ForEach(0..<5) { tag in
                    NavigationLink("Link \(tag)", destination: DetailView(name: "View \(tag)"), tag: tag, selection: self.$selectionIndex)
                        .foregroundColor((self.selectionIndex ?? 0) == tag ? Color.red : Color.black)
                }
            }
        }
    }
}

struct DetailView: View {
    var name: String
    var body: some View {
        Text(self.name)
    }
}

Нажатие на ссылки работает отлично, а также изменяет DetailView. Я пытаюсь выделить выбранную кнопку, поэтому сохраняю selectionIndex.

К сожалению, selectionIndex иногда сбрасывается в 0. Что я делаю не так?

EDIT

Включение NavigationLink в List показывает проблему c лучше, поскольку у List есть свой выбор (этот выбор остается, но мой собственный var selectionIndex сбрасывается).

        NavigationView {
            List {
                ForEach(0..<5) { tag in
                    NavigationLink("Link \(tag)", destination: DetailView(name: "View \(tag)"), tag: tag, selection: self.$selectionIndex)
                        .foregroundColor((self.selectionIndex ?? 0) == tag ? Color.red : Color.black)
                }
            }
        }

Смотрите этот экран:

enter image description here

1 Ответ

2 голосов
/ 03 апреля 2020

Ну, это конечно похоже на ошибку, но они делают то, что документировали - показывают назначение выбранного тега, не более. В любом случае, вероятно, стоит оставить отзыв.

Вот рабочий способ. Протестировано с Xcode 11.4.

@State var selectionIndex: Int? = nil
@State var highlighted: Int? = nil       // << explicit !!
var body: some View {
    NavigationView {
        VStack {
            ForEach(0..<5) { tag in
                NavigationLink("Link \(tag)", destination:
                    PadDetailView(name: "View \(tag)").onAppear { self.highlighted = tag },
                        tag: tag, selection: self.$selectionIndex)
                    .foregroundColor(self.highlighted == tag ? Color.red : Color.black)
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...