SwiftUI如何在关闭时将数据传递到上一个屏幕

     2023-03-13     238

关键词:

【中文标题】SwiftUI如何在关闭时将数据传递到上一个屏幕【英文标题】:SwiftUI how to pass data to previous screen on dismiss 【发布时间】:2021-07-16 11:59:11 【问题描述】:

我想将关闭 presentViewController 的数据传递到上一个屏幕。在这里,我想使用块将数据作为 UIKitApp 传递到上一个屏幕。但我不知道传递数据。我们必须将数据传回的options 是什么?

struct ContentView: View 
    @State var showModel = false
    var body: some View 
        VStack 
            Button(action: 
                showModel.toggle()
            , label: 
                Text("Show filters")
            ).sheet(isPresented: $showModel, content: 
                FilterView()
            )
        
    


struct FilterView: View 
    @Environment(\.presentationMode) var presentationMode

    var onDismiss: ((_ model: Filter) -> Void)?

    var body: some View 
        
        VStack 
            Button(action: 
                // Pass data from here to ContentView
                let filter = Filter(fromDate: "10/07/2021", toDate: "12/07/2021")
                onDismiss?(filter)
                presentationMode.wrappedValue.dismiss()
            , label: 
                Text("Applay Filters")
            ).padding()
        .padding()
    


struct Filter 
    var fromDate: String
    var toDate: String

【问题讨论】:

【参考方案1】:

您可以为此使用@Binding(或@StateObject@ObservedObject@Environmentobject@ObservableObject,使用MVVM 设计模式)

以下代码是使用@Binding 的示例。

添加/编辑的行

Text("\(filter.fromDate) and \(filter.toDate)") // to see the changed values

@State var filter = Filter(fromDate: "", toDate: "") // in ContentView

@Binding var filter: Filter // in FilterView

FilterView(filter: $filter) // $ used for @Binding parameter

完整代码

struct ContentView: View 
    @State var showModel = false
    @State var filter = Filter(fromDate: "", toDate: "")
    
    var body: some View 
        VStack 
            Text("\(filter.fromDate) and \(filter.toDate)")
            Button(action: 
                showModel.toggle()
            , label: 
                Text("Show filters")
            ).sheet(isPresented: $showModel, content: 
                FilterView(filter: $filter)
            )
        
    


struct FilterView: View 
    @Environment(\.presentationMode) var presentationMode

    var onDismiss: ((_ model: Filter) -> Void)?
    @Binding var filter: Filter

    var body: some View 
        
        VStack 
            Button(action: 
                // Pass data from here to ContentView
                filter = Filter(fromDate: "10/07/2021", toDate: "12/07/2021")
                onDismiss?(filter)
                presentationMode.wrappedValue.dismiss()
            , label: 
                Text("Applay Filters")
            ).padding()
        .padding()
    


struct Filter 
    var fromDate: String
    var toDate: String

【讨论】:

感谢@Taeeun onDismiss 我们可以日期```swift .sheet(isPresented: $showModel, onDismiss: print("(filter.fromDate) and (filter.toDate)") , 内容: FilterView(filter: $filter) )''' 还有其他方法吗?我们必须创建对象对吗? @State var filter: Filter(fromDate: "", toDate: "") @iOSDeveloper 欢迎您!我可以再问你一次,你是什么意思?如果你想创建没有初始值的对象,比如@State var filter: Filter(),那么你可以使用可选的(在类型末尾使用?),比如var fromDate: String?var toDate: String?。然后你可以使用@State var filter: Filter() 并且你必须将这个filter.fromDate 更改为filter.fromDate ?? "no date",因为它现在是可选值。 (或filter.fromDate!

在颤动中使用 StreamBuilder 时将数据传递到下一个屏幕

】在颤动中使用StreamBuilder时将数据传递到下一个屏幕【英文标题】:PassingdatatothenextscreenwhileusingStreamBuilderinflutter【发布时间】:2020-07-2607:27:58【问题描述】:我能够从Card小部件内的firestore获取数据,但无法详细说明-我的意思... 查看详情

如何将值从一个活动传递到上一个活动

】如何将值从一个活动传递到上一个活动【英文标题】:Howtopassthevaluesfromoneactivitytopreviousactivity【发布时间】:2010-11-1014:33:23【问题描述】:如何将值从一个屏幕传递到其前一个屏幕?考虑这种情况:我有两个活动。第一个屏幕... 查看详情

如何在 SwiftUI 中使模态不可关闭

】如何在SwiftUI中使模态不可关闭【英文标题】:Howtomakemodalnon-dismissibleinSwiftUI【发布时间】:2020-02-1208:53:55【问题描述】:我正在创建一个应用程序,我在其中创建了第一个屏幕(它将是应用程序的简短描述),并且在屏幕上我... 查看详情

单击 Gridview 项时将数据传递到另一个屏幕

】单击Gridview项时将数据传递到另一个屏幕【英文标题】:PassdatatoanotherscreenwhenGridviewitemisclicked【发布时间】:2019-05-0823:50:17【问题描述】:我是一名学习Flutter的Java开发人员。单击Gridview的项目时,我需要将数据传递到另一个屏... 查看详情

如何将 swiftUI 的图像传递给 UIImage? [关闭]

】如何将swiftUI的图像传递给UIImage?[关闭]【英文标题】:HowtopassImageofswiftUItotoUIImage?[closed]【发布时间】:2020-07-0105:13:31【问题描述】:我想把Image转换成UIImage。我正在单击相机中的图片并将其显示在swiftUI的图像上。现在我想将... 查看详情

如何在导航时将数据从 Sidemenu 传递到其他页面

】如何在导航时将数据从Sidemenu传递到其他页面【英文标题】:HowtopassdatafromSidemenutootherPagewhilenavigating【发布时间】:2019-06-2209:26:26【问题描述】:所以基本上我有两种类型的用户教师和学生,所以我应该如何根据用户类型显示... 查看详情

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]

】如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器?[关闭]【英文标题】:Howtopassviewtoanothercontrollerwhilecustompushandpopanimationinios?[closed]【发布时间】:2014-11-1216:57:22【问题描述】:我正在使用自定义过渡UIViewControlle... 查看详情

如何使用 NavigationLink 在 SwiftUI 视图之间传递数据

】如何使用NavigationLink在SwiftUI视图之间传递数据【英文标题】:HowtopassdatabetweenSwiftUIviewsusingNavigationLink【发布时间】:2021-12-2520:22:23【问题描述】:我正在参与一个小型SwiftUI练习,以了解如何使用NavigationLink在视图之间传递数据... 查看详情

如何在 SwiftUI 中将数据从视图传递到另一个视图?

】如何在SwiftUI中将数据从视图传递到另一个视图?【英文标题】:HowtopassdatafromaviewtoanotherviewinSwiftUI?【发布时间】:2021-12-1310:09:48【问题描述】:我正在处理一个大问题,我尝试了很多方法来解决这个问题,但确实没有找到合... 查看详情

如何在swiftui中的视图之间传递数据?

】如何在swiftui中的视图之间传递数据?【英文标题】:Howtopassdatabetweenviewsinswiftui?【发布时间】:2021-01-2111:05:10【问题描述】:我有一个视图,我希望用户在其中输入数据。然后我希望用户能够按下将用户引导到另一个视图的按... 查看详情

将数据从 UIViewRepresentable 函数传递到 SwiftUI 视图

】将数据从UIViewRepresentable函数传递到SwiftUI视图【英文标题】:PassingdatafromUIViewRepresentablefunctiontoSwiftUIView【发布时间】:2021-11-2315:26:40【问题描述】:用户在地图上查找送货地址,然后地址由位于屏幕中间的标记标识。然后通过... 查看详情

将数据从模型传递到 SwiftUI 中的视图

】将数据从模型传递到SwiftUI中的视图【英文标题】:PassdatafrommodeltoviewinSwiftUI【发布时间】:2021-02-1706:27:41【问题描述】:从CameraView中的按钮填充videoClips数组后,如何从CameraService获取数据。我希望能够按下一个按钮并通过AVPlay... 查看详情

如何在swift 3中从一个视图控制器传递到上一个视图控制器时设置委托?

】如何在swift3中从一个视图控制器传递到上一个视图控制器时设置委托?【英文标题】:howtosetdelegatewhilepassingfromoneviewcontrollertopreviousinswift3?【发布时间】:2017-09-0805:07:46【问题描述】:这里我试图将选定的数据从表视图传递到... 查看详情

如何在 FLutter 中使用 pushNamed 将数据从一个屏幕传递到另一个屏幕?

】如何在FLutter中使用pushNamed将数据从一个屏幕传递到另一个屏幕?【英文标题】:howtopassdatafromonescreentoanotherscreenwithpushNamedinFLutter?【发布时间】:2021-12-1500:36:37【问题描述】:我想使用pushNamed将文本框控制器的数据从一个屏幕... 查看详情

Swiftui 动态动画面板从下到上

】Swiftui动态动画面板从下到上【英文标题】:Swift:UIDynamicanimatepanelfrombottomtotop【发布时间】:2015-04-1519:40:39【问题描述】:我想用UIDynamicAnimator构建一个从底部向上滑动的简单自定义视图。当应用加载时,我使用以下方法将视图... 查看详情

如何在颤动中将列表数据从一个屏幕传递到另一个屏幕(StatefulWidget)

】如何在颤动中将列表数据从一个屏幕传递到另一个屏幕(StatefulWidget)【英文标题】:HowtopassListdataonescreentoanother(StatefulWidget)influtter【发布时间】:2021-11-0714:00:01【问题描述】:我在一个屏幕中有卡片数据,我将卡片文本保存... 查看详情

如何在 SwiftUI 中创建共享导航栏以在多个视图之间进行交互? [关闭]

】如何在SwiftUI中创建共享导航栏以在多个视图之间进行交互?[关闭]【英文标题】:Howtocreateasharednavigationbartointer-navigateamongmultipleviewsinSwiftUI?[closed]【发布时间】:2021-11-2618:52:32【问题描述】:我想通过点击每个屏幕底部共享导... 查看详情

如何将道具从一个屏幕传递到另一个屏幕并显示? [复制]

】如何将道具从一个屏幕传递到另一个屏幕并显示?[复制]【英文标题】:Howtopassapropsfromonescreentoanotheranddisplayit?[duplicate]【发布时间】:2019-06-1310:46:48【问题描述】:我必须在reactjs中将数据从一个屏幕传递到另一个屏幕。并在... 查看详情