ios - 如何将数据从 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
}
解决方案
您首先在视图控制器上创建一个属性,如下所示:
var completionHandler:((String) -> String)?
它是一个具有闭包类型的属性 completionHandler。闭包是可选的,用 ? 表示,闭包签名是 (String) -> String。这意味着闭包有一个字符串类型的参数并返回一个字符串类型的值。
再一次,在视图控制器中,当文本被发送时调用闭包:
let myTextedAmount = completionHandler?(amount.text)
然后,在视图中,您可以像这样定义闭包:
vc.completionHandler = { text in
print("text = \(text)")
return text
}
推荐阅读
- javascript - 我怎样才能获得文档的数量并以有效的方式过滤它们?(猫鼬)
- laravel - 如何在 Laravel Passport OAuth2 身份验证中使用 OTP 登录
- java - java中没有抽象类的桥模式
- arrays - 如何从 .bmp 文件中获取字节数组?(winapi\汇编程序)
- javascript - 如何为 react-bootstrap 选项卡组件放置工具提示
- node.js - 错误:fsEvents 不是函数(使用 Jest 和 create-react-app)
- .htaccess - 如何使用查询参数将所有 www 请求重定向到非 www
- xcode - 如何在库中获取 Xcode 11.3.1 视图和指示器?
- docker - 如何在 docker 文件中运行 docker 命令?
- python - 如何使用机器人框架进行价值验证?