Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift 3:UITapGestureRecognitor未启动_Ios_Swift_Uigesturerecognizer - Fatal编程技术网

Ios Swift 3:UITapGestureRecognitor未启动

Ios Swift 3:UITapGestureRecognitor未启动,ios,swift,uigesturerecognizer,Ios,Swift,Uigesturerecognizer,我不知道为什么,但我的UITapGestureRecognitor没有正确启动。事实上它根本没有开火。我正在尝试让一个函数在点击图像时运行 有关设置的信息: 不使用故事板,以编程方式加载所有内容 我正在加载它的视图上也有一个UICollectionView 好的,那么对于代码: UIImageView的声明如下: let backButtonIcon: UIImageView = { let bbi = UIImageView() bbi.image = UIImage(na

我不知道为什么,但我的UITapGestureRecognitor没有正确启动。事实上它根本没有开火。我正在尝试让一个函数在点击图像时运行

有关设置的信息:

  • 不使用故事板,以编程方式加载所有内容
  • 我正在加载它的视图上也有一个UICollectionView
好的,那么对于代码:

UIImageView的声明如下:

let backButtonIcon: UIImageView = {
    let bbi = UIImageView()
    bbi.image = UIImage(named: "backIcon")
    bbi.translatesAutoresizingMaskIntoConstraints = false
    bbi.layer.zPosition = 2
    return bbi
}()
然后,我在视图中添加了以下内容:

view.addSubview(backButtonIcon)
要将点击功能添加到我正在使用的UIImageView,请执行以下操作:

let tapBackButton = UITapGestureRecognizer(target: self, action: #selector(backButtonPressed))
backButtonIcon.isUserInteractionEnabled = true
backButtonIcon.addGestureRecognizer(tapBackButton)
最后,这里是我正在尝试运行的函数,目前只是一个简单的打印:

func backButtonPressed(sender: UITapGestureRecognizer) {
    print("Go Back Pressed")
}
更新: 我已经尝试添加:

 bbi.isUserInteractionEnabled = true
而且:

backButtonIcon.isUserInteractionEnabled = true
更新2: 我创建了另一个空白视图,使用的代码与这里的代码完全相同,并且工作正常

这可能与UICollectionView有关吗


我将UICollectionView的zPosition-1和UIImageView的zPosition设置为1,但这也不起作用

默认情况下,图像视图忽略用户事件。通常,使用图像视图仅在界面中显示视觉内容。如果希望图像视图也处理用户交互,请将其isUserInteractionEnabled属性的值更改为true。完成此操作后,您可以附加手势识别器或使用任何其他事件处理技术来响应触摸事件或其他用户启动的事件


来源:

默认情况下,图像视图忽略用户事件。通常,使用图像视图仅在界面中显示视觉内容。如果希望图像视图也处理用户交互,请将其isUserInteractionEnabled属性的值更改为true。完成此操作后,您可以附加手势识别器或使用任何其他事件处理技术来响应触摸事件或其他用户启动的事件


来源:

我认为问题在于UICollectionView,它由UICollectionViewCells组成,根据定义已经启用了tap

我正在浏览一个非常旧的应用程序(Swift 1.x),它是我为个人使用而编写的(因为它从未见过光明),下面是我似乎在做的事情——你可能需要做一些变化:

  • 子类化UICollectionViewCell,并将UILabel和UIImageView作为子视图添加到其中,并填充它们(以及用于点击操作的NSURL)

  • 声明(并采用)一个特定的UIViewController也是我的UICollectionView委托(就我而言,它也是一个SFSafariViewController委托)

  • 在VC的viewDidLoad()中,我设置了长按(用于删除)和双击(用于重新加载)手势,但没有设置轻触手势-这是不需要的

  • 在VC的viewDidLoad()中,我加载(并填充)了单元格

以下是我认为您会遇到的问题,但如果没有更多的代码,我不确定:

  • 编码依据:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if let cell = collectionView.cellForItemAtIndexPath(indexPath) as? BookmarkCell {
            selectedBookmarkSection = indexPath.section
            selectedBookmarkRow = indexPath.row
            sfc = SFSafariViewController(URL: cell.targetUrl!, entersReaderIfAvailable:true)
            sfc.delegate = self
            presentViewController(sfc, animated: true, completion: nil)
        } else {
            // Error indexPath is not on screen: this should never happen.
        }
    }
    
请善待我,因为这是我在2014年7月写的东西!(我为Swift 3.x更新了collectionView(didSelectItemAt:indexPath:),但仅此而已。)


TR;DR:我认为——特别是如果您的点击在UICollectionView之外看到的话——这可能会让您工作。

我认为问题在于UICollectionView,它由UICollectionViewCell组成,这些单元格已经根据定义启用了点击

我正在浏览一个非常旧的应用程序(Swift 1.x),它是我为个人使用而编写的(因为它从未见过光明),下面是我似乎在做的事情——你可能需要做一些变化:

  • 子类化UICollectionViewCell,并将UILabel和UIImageView作为子视图添加到其中,并填充它们(以及用于点击操作的NSURL)

  • 声明(并采用)一个特定的UIViewController也是我的UICollectionView委托(就我而言,它也是一个SFSafariViewController委托)

  • 在VC的viewDidLoad()中,我设置了长按(用于删除)和双击(用于重新加载)手势,但没有设置轻触手势-这是不需要的

  • 在VC的viewDidLoad()中,我加载(并填充)了单元格

以下是我认为您会遇到的问题,但如果没有更多的代码,我不确定:

  • 编码依据:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if let cell = collectionView.cellForItemAtIndexPath(indexPath) as? BookmarkCell {
            selectedBookmarkSection = indexPath.section
            selectedBookmarkRow = indexPath.row
            sfc = SFSafariViewController(URL: cell.targetUrl!, entersReaderIfAvailable:true)
            sfc.delegate = self
            presentViewController(sfc, animated: true, completion: nil)
        } else {
            // Error indexPath is not on screen: this should never happen.
        }
    }
    
请善待我,因为这是我在2014年7月写的东西!(我为Swift 3.x更新了collectionView(didSelectItemAt:indexPath:),但仅此而已。)


TR;DR:我认为——特别是如果在UICollectionView之外看到您的点击——这可能会让您工作。

选择器似乎不正确,至少应该与无法识别的选择器崩溃。
backButtonIcon
的超级视图是什么?@Larme没有崩溃。为什么不正确?当我没有维护添加到视图的引用(即变量)时,我遇到了一个手势识别器不工作的问题。以下是我的SO帖子:在生命周期中,你在哪里添加手势识别器?添加子视图的顺序是什么?在何处/如何设置布局约束?可能需要更多的上下文helpful@Brett道歉。因此,手势识别器位于视图Did load中,而collectionview位于视图Did DISPENCE中。我试着把其中一个加到另一个上,但还是不起作用。我对Swift编程相当陌生,因此缺少上下文,如果您能让我知道该做什么,以及如何找到我可以为您获取的信息:)选择器似乎不正确,它至少应该与无法识别的选择器崩溃。
backButtonIcon
的超级视图是什么?@Larme没有崩溃。为什么不正确?当我没有维护添加到视图的引用(即变量)时,我遇到了一个手势识别器不工作的问题。以下是我的SO帖子:在生命周期中,你在哪里添加手势识别器?添加子视图的顺序是什么?你在哪里/怎么样