didSelectItemAt 未被调用

Posted

技术标签:

【中文标题】didSelectItemAt 未被调用【英文标题】:didSelectItemAt not being called 【发布时间】:2016-09-29 21:32:51 【问题描述】:

我的收藏视图已准备就绪,我正在尝试使用didSelectItemAt 转到详细视图。但我只想测试记录每个项目并且它没有记录。

我已经设置了所有的代表:

*

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UISearchBarDelegate *

    @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!
    @IBOutlet weak var searchBar: UISearchBar!
    @IBOutlet weak var collection: UICollectionView!

    override func viewDidLoad() 
        super.viewDidLoad()
        collection.dataSource = self
        collection.delegate = self
        searchBar.delegate = self

        activityIndicatorView.isHidden = true


        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
        view.addGestureRecognizer(tap)
    

*

我做错了什么?

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    let movie : Movie

    movie = MOVIE_ARRAY[indexPath.row]
    print(movie.plot)

【问题讨论】:

你设置了集合视图的代理吗? 检查你是否没有使用 didDeselectItemAt indexPath 而不是 didSelectItemAt didSelectItemAt 被使用 :) 谷歌搜索了一个小时,这是最常见的错误。是的,视图的委托都设置好了。 这是我的 github - github.com/bwong199/ios-Movie-Search-Application 【参考方案1】:

您在视图上添加了TapGestureRecognizer。 TapGestureRecognizer 有一个属性cancelsTouchesInView

- var cancelsTouchesInView: Bool get set

一个布尔值,影响在识别手势时是否将触摸传递到视图。

默认情况下这是true,并且会阻止调用 didSelectItemAt,因为在识别到点击后触摸不会传递到视图。 您需要将其设置为false,如下所示:

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)

【讨论】:

你成就了我的一天 那些意想不到的手势识别器! 我在另一个文件的函数中添加了点击手势,并在我的视图控制器上将其称为 hideKeyboardWhenTappedAround() ......根据您的建议编辑该函数非常有效......跨度> 我想在点击一个项目时禁用 TapGestureRecognizer 工作(当 didSelectItemAt 触发时)。我尝试了你的解决方案,但它只允许 didSelectItemAt 执行,但在此之后它执行它的方法 看了这个答案然后说“不,不适用”......当然,你猜怎么着......适用!!!

以上是关于didSelectItemAt 未被调用的主要内容,如果未能解决你的问题,请参考以下文章

与 UITapGestureRecognizer 一起使用时未调用 collectionView 的 didSelectItemAt

为啥我的 .pushViewController 不能快速从 didSelectItemAt 工作

didSelectItemAt 在 SCLAlertView 中不起作用

UIColctionView didSelectItemAt 问题

UICollectionView didSelectItemAt/didUnselectItemAt 不起作用

UICollectionView didSelectItemAt 方法不起作用