首页 > 解决方案 > 如何将数据从 UIViewsController 传递到 UIView,Swift

问题描述

我正在尝试将数据从我的 UIViewcoontroller 传递到 UIView。我希望将金额值传递给 UIView,我需要它通过 UIView 中的按钮发送请求。

//this is my UIViewController

final class PayParkingViewController: BaseViewController {
    @IBOutlet weak var amount: UITextField!
//for example I need this myAmount value to be passed in my UIView
myAmount = amount.text
}
//This is my UIView
final class PaymentChoice: UIView {

    @IBOutlet weak var mastercard: UIButton!
    @IBOutlet var contentView: UIView!


      override init(frame: CGRect) {
         super.init(frame: frame)

         commonInit()
     }

     required init?(coder aDecoder: NSCoder) {
         super.init(coder: aDecoder)
         commonInit()
     }

     private func commonInit() {
             Bundle.main.loadNibNamed(className, owner: self, options: nil)
         guard let content = contentView else { return }
         addSubview(content)
         content.frame = bounds
         content.autoresizingMask = [.flexibleWidth, .flexibleHeight]
     }
    @IBAction func mastercardIsSelected(_ sender: Any) {

// here I need myAmount value from my UIViewController

    }

标签: iosswiftuiview

解决方案


您首先在视图控制器上创建一个属性,如下所示:

var completionHandler:((String) -> String)?

它是一个具有闭包类型的属性 completionHandler。闭包是可选的,用 ? 表示,闭包签名是 (String) -> String。这意味着闭包有一个字符串类型的参数并返回一个字符串类型的值。

再一次,在视图控制器中,当文本被发送时调用闭包:

let myTextedAmount = completionHandler?(amount.text)

然后,在视图中,您可以像这样定义闭包:

vc.completionHandler = { text in

    print("text = \(text)")

    return text
}

推荐阅读