【发布时间】:2016-03-16 01:25:54
【问题描述】:
我有一个类 (FilterBar.swift) 和一个视图控制器。 viewcontroller 调用该类来填充带有图像列表的 scrollView 对象,并且每个图像都添加了一个 tapGestureRecognizer,如下所示:
let tapGesture = UITapGestureRecognizer(
target: imgView, action: Selector("filterClicked:"));
tapGesture.numberOfTapsRequired = 1;
tapGesture.numberOfTouchesRequired = 1;
imgView.addGestureRecognizer(tapGesture);
我在FilterBar中也有一个功能如下:
@objc func filterClicked(sender: UITapGestureRecognizer) {
print(sender.view?.superview?.description)
print("sent from view: \(sender.view!.tag)");
}
当我尝试点击图片时,出现以下错误:
2016-03-16 02:06:45.800 ImageFilter[71811:6885004] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImageView delegate.filterClicked:]: unrecognized selector sent to instance 0x7fc07951f010'
所以我想也许我需要一个协议,所以我在 FilterBar 中创建了一个协议,如下所示:
protocol FilterClickedDelegate {
func filterClicked(sender: UITapGestureRecognizer);
}
let delegate:FilterClickedDelegate?
(adjusted this line) let tapGesture = UITapGestureRecognizer(
target: imgView, action: Selector("delegate.filterClicked:"));
我将该协议添加到 viewcontroller 类中,并且我还添加了协议所需的功能,但我仍然遇到相同的错误。所以第一个问题:我在这个场景中使用协议是否正确,因为它在 viewcontroller 上运行?
第二个问题:我在选择器中做错了什么?有没有具体的方法在选择器中提及协议功能?
【问题讨论】:
-
哪一行崩溃了?
-
当我点击它崩溃的图像时不在任何一行
-
尝试删除@objc
-
同样的事情没有变化
-
target: imgView将其更改为 -target: self, action...
标签: ios swift selector uitapgesturerecognizer