SwiftUI обновляет состояние на навигационном действии - PullRequest
3 голосов
/ 28 февраля 2020

Я использую навигационное представление в моем приложении SwiftUI Ma c OSX. У меня есть представление списка, чтобы выбрать людей, а затем отобразить их атрибуты в PersonDetail. Работает нормально. Тем не менее, я отправляю состояние для привязки в PersonDetail View.

Это работает нормально, однако каждый раз, когда нажимается новая строка, я хочу сбросить свое состояние s_selectedView на 0 снова.

Есть ли событие для обновлений NavigationView? Я попытался использовать событие onAppear() в моем представлении PersonDetail, однако оно вызывается только один раз. Единственный вариант, который я вижу, это подтолкнуть мое состояние к моему List, а затем изменить его на tapGesture представления таблицы.

Это мой код навигационного представления:

  NavigationView {
    PersonList(selectedPerson: $selectedPerson)

    if selectedPerson != nil {
        PersonDetail(person: selectedPerson!, s_currentView: self.$s_selectedView)
        //Here I would need a event, for appear / update
        //.onAppear
        //{
            //only called once 
        //}

    }
  }

Это моя привязка в том же представлении выше:

@State var s_selectedView : Int = 0

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

TL: DR

Существует ли эквивалентная функция, такая как onAppear только для update для состояния? Проблема в том, что мое представление больше не появляется (onAppear не вызывается), только данные меняются из-за события @State. Как я могу поймать это событие?

1 Ответ

2 голосов
/ 28 февраля 2020

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

(поцарапано - не проверено)

NavigationView {
    PersonList(selectedPerson: Binding<Type_Of_Selected_Person>(get: {
            self.selectedPerson
        }, set: {
            self.selectedPerson = $0
            self.s_selectedView = 0
        }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...