我有一个带有插座的自定义UIView。现在要设置标题和图像,我做了一个在视图控制器中调用的函数,但是当用户点击自定义UIView时,我要为此目的执行一些操作是使用点击手势。所以我做了一个闭合以使用点击手势,并将其作为函数中的最后一个参数传递,但是我不知道如何使用闭合来调用点击手势 很抱歉,如果这个傻子只是需要一点帮助,就在这里
我的IBOutlets
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var title: UILabel!
@IBOutlet weak var toggle: UISwitch!
我的关闭和点击手势
// Closure
var onClickView: (() -> Void)?
// Tap gesture
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.onClickGestureRecognizerView))
self.containerView.addGestureRecognizer(tap)
@objc func onClickGestureRecognizerView() {
if let onClickView = onClickView {
onClickView()
}
}
这是我传递标题,图像和此结束符的功能
func setSettingView(title: String, image: UIImage, onClickView: (() -> Void)? = nil) {
self.title.text = title
self.imageView.image = image
}
我只想知道当我调用该函数时,如何在分配标题和图像后使用此闭包执行点击动作
我正在做这样的事情
accountInformationSettingView.setSettingView(title: "Account Information", image: #imageLiteral(resourceName: "account")) {
self.present(AccountInformationViewController.instantiateViewController(), animated: true, completion: nil)
}
答案 0 :(得分:2)
分配通过了视图属性的闭包。
func setSettingView(title: String, image: UIImage, onClickView: (() -> Void)? = nil) {
self.title.text = title
self.imageView.image = image
self.onClickView = onClickView
}
现在,当您点击视图时,此闭合将被称为
调用setSettingView方法时,调用如下
let accountInformationSettingView = CustomView()
// setup accountInformationSettingView
let tapClosure = {
self.present(UIViewController(), animated: true, completion: nil)
}
accountInformationSettingView.setSettingView(title: "Account Information", image: #imageLiteral(resourceName: "account"), onClickView: tapClosure)
在setSettingView
方法中,tapClosure
将在self.onClickView
中分配
点击containerView时,将调用onClickGestureRecognizerView容器,并检查self.onClickView是否为空。
然后将tapClosure
称为
答案 1 :(得分:0)
好吧,@ RajeshKumar R是正确的,当您说在init方法中调用它时,但实际上,当我们使用nib制作自定义UIView时,有2种方法只在一种方法中调用,所以我在两个函数中均调用了该方法像这样
private func addGesture() {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.onClickGestureRecognizerView))
self.containerView.addGestureRecognizer(tap)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupFromNib()
addGesture()
}
override init(frame: CGRect) {
super.init(frame: frame)
setupFromNib()
addGesture()
}
这解决了这个问题,非常感谢所有真正意义上的帮助人员