简介
我正在尝试将一个点击手势识别器添加到我自定义的UIView
类CardView
的实例中。因此,我创建了一个自定义视图xib
并通过File's Owner
链接我的Swift类文件CardView.swift
。然后,我连接每个输出口到相应的UI元素。
我想在代码中将我的自定义视图CardView
添加到我的ViewController,并将一个tap手势附加到新创建的视图上。
CardView类:
class CardView: UIView {
// Delcare outlets
@IBOutlet var view: UIView!
@IBOutlet weak var title: UILabel!
@IBOutlet weak var icon: UIImageView!
//MARK: Initialization
override init(frame: CGRect) {
super.init(frame: frame)
Bundle.main.loadNibNamed("CardView", owner: self, options: nil)
addSubview(view)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
}
视图控制器类
在 ViewController.swift 文件的 viewDidLoad()
函数中,我创建了一个 CardView() 的实例:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let cardView = CardView()
self.view.addSubview(cardView)
// Style cardView instance
cardView.view.backgroundColor = UIColor.yellow
cardView.view.center.x = self.view.center.x
cardView.view.center.y = self.view.center.y
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(gestureRecognizer:)))
cardView.addGestureRecognizer(tapGesture)
}
然后我像平常一样使用Swift将tapGesture添加到我的cardView
中:
let tapGesture = UIPanGestureRecognizer(target: self, action: #selector(handleTap(gestureRecognizer:))) cardView.addGestureRecognizer(panGesture)
并添加相应的函数进行调用:
func handleTap(gestureRecognizer: UIGestureRecognizer) {
let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
主要问题/难题
我在为新创建的 CardView 添加 Tap 手势识别器时遇到了一个问题 - 即无法调用 handleTap()
函数。
我已经尝试了多种方法,例如将 cardView.isUserInteractionEnabled = true
添加到两个文件(ViewController.swift
和 CardView.swift
类)中。也尝试只在其中一个文件中添加而不是两个都添加。
在声明手势类型后,我还尝试将它添加到我的超级视图中,即与 ViewController.swift
文件相关联的视图。当我点击屏幕时,函数将被触发,但不会在我自己创建的自定义 UIView 上触发。
除此之外,我还尝试将 UIGestureRecognizerDelegate
添加到我的 VC 类中,但没有结果。
class ViewController: UIViewController, UIGestureRecognizerDelegate {}
在我的 viewDidLoad()
函数中,在将手势连接到我的 cardView
之前,我添加了这一行额外的代码:tapGesture.delegate = self
。
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(gestureRecognizer:)))
tapGesture.delegate = self
architectView.addGestureRecognizer(tapGesture)