将值从 swift viewcontroller 传递给 swiftui 然后再返回

什么

所以使用 UIHostingController 从旧的视图控制器打开一个 swiftUI 视图。打算在花哨的 swiftui 界面中进行一些编辑,然后当我关闭 swiftui 视图时想要将编辑后的值传递回原始视图控制器。

我可以将价值转移到 swiftui 视图,但想知道如何取回它?寻找快速的方向。是协议,可观察的。什么是正确的方法

将价值从 VC 传递给 SwiftUI 并说:但要取回价值??

var selectedValue:String = "this is the selected text to edit"

let swiftUIView = swiftUIEditView(valueSelected: selectedValue)

let hostingController = UIHostingController(rootView: swiftUIView)
present(hostingController, animated: true, completion: nil) 
那么

有很多方法可以做到这一点,但我更喜欢闭包。您可以使用dismissedWithString闭包传回值,如下所示:

struct SwiftUIEditView: View {
    
    @State var valueSelected: String
    var dismissedWithString: ((String) -> Void)? /// closure here!
    
    var body: some View {
        VStack {
            TextField("Text field", text: $valueSelected)
                .multilineTextAlignment(.center)
            
            Button(action: {
                dismissedWithString?(valueSelected) /// call the closure and pass in the text
            }) {
                Text("Return string and dismiss")
            }
        }
    }
}

然后你的视图控制器将是这样的:

class ViewController: UIViewController {
    var selectedValue: String = "this is the selected text to edit"

    func presentEditView() {
        
        var viewController: UIViewController?
        
        let contentView = SwiftUIEditView(valueSelected: selectedValue) { [weak self] returnedString in
            
            /// dismiss UIHostingController - it's a trailing closure, so you don't need to put the `dismissSelf`
            viewController?.dismiss(animated: true, completion: nil)
            
            self?.selectedValue = returnedString /// assign
            print(returnedString) /// will be the value
        }
        
        viewController = UIHostingController(rootView: contentView)
        
        if let vc = viewController { /// viewController will never be nil, but I don't like to force-unwrap
            self.present(vc, animated: true, completion: nil)
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在使用Swift关闭ViewController的过程中,如何将值从ViewController B传递给ViewController A?

将数组从 viewController.swift 传递给 tableViewController.swift

Swift:将UITableViewCell标签传递给新的ViewController

SwiftUI 将 Int 值传递给 ViewModel

Swift场景userActivity NSUserActivity传递给viewController

将稀疏数组从Matlab传递到Eigen(C ++),然后再返回到MATLAB?

将本机字符串类型从CLI传递到本机,然后再返回

将地理位置从Swift 2 ViewController传递给Javascript方法

如何将列表传递给模型,然后再绑定到网格

将值传递给先前的 viewController ,未调用委托方法

将值传递给下一个viewController

将数据传递给ViewController

将CoreData密钥传递给新的ViewController

将数据从Objective-C Viewcontroller传递到Swift ViewController

SwiftUI将值从Geometry Reader传递给函数

SwiftUI将保存的值传递给父视图

将绑定值作为参数传递给SwiftUI 2视图

如何将数据从viewController传递到swiftUI视图?

将数据从ViewController传递到可表示的SwiftUI

如何将数据传递到ViewController并加载,然后再将其推入Navigation堆栈?

将javascript值传递给php并返回

在Swift中将对象传递给ViewController

如何使用 prepareForSegue (Swift 4, Xcode 9) 将 UIButton 的标签(一个 Int)传递给其他 ViewController

将视图传递给SwiftUI中的结构

SwiftUI:将视图信息传递给 UIKit

SwiftUI将var从View传递给类

SwiftUI - 将变量传递给 Observable 对象

将变量从 UIViewController 传递给 SwiftUI 视图

Swift 3-在View Controller之间传递数据,然后再传递给另外2个