>source

두 번째 보기가 닫혔는지 여부를 firstView가 알고 있는 두 개의 보기가 있을 때 작동하게 만들 수 있었습니다.

  • 첫 번째 보기는 두 번째 보기를 나타냅니다.
  • 두 번째 보기를 닫으면 첫 번째 보기가 닫혔다는 것을 알 수 있습니다.

여기에 code가 있습니다

struct FirstView: View {
    @State var openSecondView: Bool= false
    var body: some View {
        Button.init {
            openSecondView= true
        } label: {
            Text.init("Click here")
        }.sheet(isPresented: $openSecondView) {
            if openSecondView {
                SecondView.init(bindSecondView: $openSecondView)
            }
        }
    }
}
struct SecondView: View {
    @Binding var bindSecondView: Bool
    var body: some View {
        Button.init {
            bindSecondView= false
        } label: {
            Text.init("Click here to dismiss sheet")
        }
    }
}

예상대로 작동합니다.

세 가지 보기가 있는 또 다른 사용 사례가 있습니다. 첫 번째 보기는 사용자가 세 번째 보기에서 무엇을 했는지 알아야 하는데 저는 이것을 이해하는 데 어려움을 겪고 있습니다. 단순화를 위해 아래 예제를 추가했습니다.

struct FirstView: View {
    @State var openSecondView: Bool= false
    var body: some View {
        Button.init {
            openSecondView= true
        } label: {
            Text.init("Click here to show second view")
        }.sheet(isPresented: $openSecondView) {
                SecondView.init(bindSecondView: $openSecondView)
        }
    }
}
struct SecondView: View {
    @Binding var bindSecondView: Bool
    var body: some View {
        Button.init {
            bindSecondView= false
        } label: {
            Text.init("Click here to dismiss sheet")
        }
        ThirdView.init()
    }
}
struct ThirdView: View {
    var body: some View {
        Button.init {
            //user did something
        } label: {
            Text.init("By clicking this button in third view, first view should know about this so I can do some updates in first view")
        }
    }
}

첫 번째 보기에서 세 번째 보기에서 버튼이 탭되었음을 알 수 있도록 속성을 올바르게 전달하고 이러한 보기 사이에서 관찰하는 방법은 무엇입니까?

도움을 주시면 감사하겠습니다.

따라서 데이터가 보기 1로 다시 전달되지 않으며 흥미로운 이벤트(버튼 클릭)만 있습니까? 주제는 아니지만 보기 code의 모든 곳에 .init를 작성할 필요가 없습니다.

Joakim Danielson2021-10-27 14:31:49

예, 제 사용 사례에서는 전체 첫 번째 보기만 업데이트하면 되므로 데이터를 전달할 필요가 없습니다. .init와 관련하여 -Xcode는 완료를 표시하는 데 다소 불편하지만 .init를 입력하면 빠릅니다. :)

user41507582021-10-27 14:47:53

해당 링크의 @Asperi 예제는 이미 수행한 것과 유사합니다(첫 번째 예제 참조).

user41507582021-10-27 15:42:28
  • 이전 Python Pandas: 여러 주기에서 피크당 최대값을 얻는 방법
  • 다음 sql : 단일 열의 지정된 날짜에 대해 활성 대 비활성 레code 수를 반환합니다.