Swift - UIControl addTarget 不起作用

Posted

技术标签:

【中文标题】Swift - UIControl addTarget 不起作用【英文标题】:Swift - UIControl addTarget not working 【发布时间】:2017-06-14 10:15:52 【问题描述】:

我用UIView 创建了XIB。我已经为它分配了MyViewControl: UIControl 类,所以我可以在里面添加修饰。它有效,在我的课堂上调用了触摸。

现在,我创建了UICollectionView 并将这个“xib”添加为单元格视图。我现在想在UICollectionViewDelegate 类中处理触摸。所以我这样做了:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath)         
    for v in cell.contentView.subviews             
        if let c: MyViewControl = v as? MyViewControl                
            c.isUserInteractionEnabled = true
            c.addTarget(self, action: #selector(myClick), for: UIControlEvents.touchUpInside)
        
            


func myClick(sender: Any)
    print("click....")

但是,myClick 选择器永远不会被调用。如果我将 UIButton 添加到 MyViewControl 并为此按钮执行相同的操作 (addTarget),则会正确调用回调。

【问题讨论】:

只需将方法实现为func myClick() print("click....") 【参考方案1】:

在发送者之前添加下划线_作为_ sender: Any,并在#selector下的#selector中添加(_:)action即。 myClick(_ :)

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath)         
    for v in cell.contentView.subviews             
        if let c: MyViewControl = v as? MyViewControl                
            c.isUserInteractionEnabled = true
            c.addTarget(self, action: #selector(myClick(_:)), for: UIControlEvents.touchUpInside)
        
            


func myClick(_ sender: Any)
    print("click....")

希望对你有帮助

【讨论】:

以上是关于Swift - UIControl addTarget 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Swift - UIControl addTarget 不起作用

如何为自定义 UIControl 添加触摸事件并在 swift 5 中确定触摸的项目

在swift怎么创建podfile文件

Apple 的库参考使用哪个版本的 swift?

如果 UIControl 中的 SVG 图像,点击不起作用

对象在 Swift 中不符合 kvc 时的对象通信