簡體   English   中英

在SwiftUI中使用函數創建視圖時如何使用@Binding?

[英]How to use @Binding when view is creating using function in SwiftUI?

我使用函數創建了視圖,並且我從另一個視圖(AbcView)調用它,我想用它執行正常@Binding ,但不知道如何傳遞值並在函數中創建@Binding

在下面的代碼中,我想將selectedPassengerIdAbcView傳遞給函數topSheetClassViews並在SelectedTitleView中的passengerIds ID 值更新時執行 @Binding,以便我可以在AbcView中獲得更新的值。

import SwiftUI

struct AbcView: View {

    @StateObject var abcViewModel: AbcViewModel
    @State private var selectedPassengerId: Int?

    init(accessibiltyID: String, abcViewModel: AbcViewModel) {
        self._abcViewModel = StateObject(wrappedValue: abcViewModel)
    }

    var body: some View {
        VStack(spacing: 0) {
            // Some Design
        }
        .overlay(
            TopView((accessibilityID: accessibilityID, content: topSheetClassViews(abcViewModel: abcViewModel), selectedRowID: $selectedPassengerId, rowHeight: $rowHeight),, alignment: .top
                   )
        )
    }
}



func topSheetClassViews(abcViewModel: AbcViewModel) -> [AnyView] {
    var views: [AnyView] = []

    for passenger in 0..<abcViewModel.Passengers.count {
        views.append(TopSheetPassengerInfoView(abcViewModel: abcViewModel, index: passenger).convertToAnyView())
    }
    return views
}

struct SelectedTitleView: View {
    @ObservedObject var abcViewModel: AbcViewModel
    var passengerIds: Int
    var body: some View {
        VStack(alignment: .trailing) {
            Text("passengerIds \(passengerIds)") // here getting correct id which I want to pass to AbcView
            Text(abcViewModel.passengerTitle(passengerId: passengerIds))
        }
    }
}

struct TopSheetPassengerInfoView: View {
    @ObservedObject var abcViewModel: AbcViewModel
    var index: Int

    var body: some View {
        VStack(alignment: .leading, spacing: 0) {
            Text(abcViewModel.passengers[index].fullName ?? "")
            SelectedTitleView(abcViewModel: abcViewModel, passengerIds: Int(abcViewModel.Passengers[index].passengerId ?? "") ?? 0)
        }
    }
}

只要把它放在你需要通過它的任何地方,比如

這里

func topSheetClassViews(abcViewModel: AbcViewModel, selection: Binding<Int?>) -> [AnyView] {

這里

views.append(TopSheetPassengerInfoView(abcViewModel: abcViewModel, selectedID: selection, index: passenger).convertToAnyView())

這里

struct TopSheetPassengerInfoView: View {
    @ObservedObject var abcViewModel: AbcViewModel
    @Binding var selectedID: Int?

等等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM