- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 VC 中,我有一个从底部拉起的 View 。我在 viewDidLoad() 中设置并添加了一个 UICollectionView:
//Add and setup the collectionView
collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: flowLayout)
collectionView?.register(PhotoCell.self, forCellWithReuseIdentifier: "photoCell")
collectionView?.delegate = self
collectionView?.dataSource = self
collectionView?.backgroundColor = #colorLiteral(red: 0.9771530032, green: 0.7062081099, blue: 0.1748393774, alpha: 1)
collectionView?.allowsMultipleSelection = false
collectionView?.allowsSelection = true
pullUpView.addSubview(collectionView!)
pullUpView.bringSubview(toFront: collectionView!)
UICollectionView Delegate 方法在扩展中,目前与 VC 在同一个代码文件中:
//MARK: - Extension CollectionView
extension MapVC: UICollectionViewDelegate, UICollectionViewDataSource {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return imagesArray.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoCell", for: indexPath) as? PhotoCell {
let imageFromIndex = imagesArray[indexPath.item]
let imageView = UIImageView(image: imageFromIndex )
cell.addSubview(imageView)
return cell
} else {
return PhotoCell()
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("selected")
//Create PopVC instance, using storyboard id set in storyboard
guard let popVC = storyboard?.instantiateViewController(withIdentifier: "popVC") as? PopVC else { return }
popVC.passedImage = imagesArray[indexPath.row]
present(popVC, animated: true, completion: nil)
}
}
问题是当我点击一个单元格时没有任何反应。我在 didSelectItemAt 方法中放置了一个 print 语句,但它永远不会被打印出来。因此,我的单元格永远不会被选中,或者至少永远不会触发 didSelectItemAt 方法!
调试和尝试了几个小时,我看不出哪里出了问题。任何帮助表示赞赏。如果允许的话,也许有人可以从 Github 打开 mijn 项目看看有什么问题?
更新:使用 Debug View Hierarchy,我看到了一些令人不安的东西:每个 photoCell 都有多个(很多!)UIImageView。我认为每个 photoCell 应该只有一个 UIImageView。我不知道是什么导致了这种行为?
最佳答案
我检查了你的代码,有几个问题:
首先,您必须更改您的 PhotoCell 实现,并仅在创建单元格时将您的 imageView 添加到类中。您的单元格未加载 XIB,因此您必须在 init(frame:)
中添加 imageView:
class PhotoCell: UICollectionViewCell {
var photoImageView: UIImageView!
override init(frame: CGRect) {
super.init(frame: frame)
setupCell()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupCell() {
photoImageView = UIImageView()
addSubview(photoImageView)
}
override func layoutSubviews() {
super.layoutSubviews()
photoImageView.frame = bounds // ensure that imageView size is the same of the cell itself
}
}
此更改后,在 cellForItem
方法中,您可以执行 cell.photoImageView.image = imageFromIndex
。
没有调用 didSelect 的问题是由于您的 pullUpView
始终具有 height = 1,即使您能够看到 collectionView,它也不会收到任何触摸。
collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 300), collectionViewLayout: flowLayout)
然后将animateViewUp
和animateViewDown
改成这样
func animateViewUp() {
mapViewBottomConstraint.constant = 300
pullUpViewHeightConstraint.constant = 300 // this will increase the height of pullUpView
UIView.animate(withDuration: 0.5) {
self.view.layoutIfNeeded()
}
}
@objc func animateViewDown() {
cancelAllSessions()
//remove previous loaded images and urls
imagesArray.removeAll()
imageUrlsArray.removeAll()
mapViewBottomConstraint.constant = 0
pullUpViewHeightConstraint.constant = 0 // this will reset height to 0
UIView.animate(withDuration: 0.5) {
self.view.layoutIfNeeded()
}
}
通过执行所有这些操作,向下滑动手势将不再有效,因为触摸被 Collection View 拦截和处理,您应该手动处理。
但是我建议您更改在线类(class),此代码有很多我不喜欢的地方。
关于ios - UICollectionView didSelectItemAt 从不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51263019/
第一个viewController import UIKit class photosCollectionViewController: UIViewController,UICollect
我的 Collection View 已准备就绪,我正在尝试执行 didSelectItemAt 以转到详细 View 。但我只想测试记录每个项目,但它没有记录。 我已经设置了所有代表: * clas
enter image description here 我在从 searchBar 过滤的 tableView 单元格实现 didSelectRowAtIndexPath 时遇到问题。当我根据搜索栏
在我的 VC 中,我有一个从底部拉起的 View 。我在 viewDidLoad() 中设置并添加了一个 UICollectionView: //Add and setup the collectio
我有一个 UICollection View 。这些东西可以有 3 种状态: - 主动 - 中性 - 无效 现在,这是 UICollectionViewCell 的代码: class NGSelect
我试图在 didSelectItemAt 的帮助下更改 collectionviewcell 中的 UIImage。当我在开始时选择单元格时它工作正常,但是当我向下滚动并向上滚动时,图像恢复到原来的状
我很困惑,因为这只是一个简单的事情,但不起作用。 这是我在这里写问题之前的检查 list 。 UICollectionViewDelegate 已注册 上面除了来自“Debug View Hierar
我在 UICollectionViewCell 中使用 didSelectItemAt 时遇到问题。我正在使用第三方框架从库中选择多张照片。然后,所选 Assets 将被传输并存储在 PHAssets
尝试在 Collection View 中选择单元格时,没有任何反应。我设置了委托(delegate),但当用户点击时它不会被调用。 func collectionView(_ collectionV
我有一个自定义的 UICollectionViewCell,上面放置了一个 UITextField。 UICollectionView 中有多个项目和多种类型的单元格,因此,我只想一次只允许一个文本字
我使用的是 UICollectionView,当用户点击一个单元格时,一个特定的进程就会运行。由于此过程可能需要几秒钟,因此我想在此过程即将开始时立即向用户显示一个带有一些处理消息的 View 。 大
我已经创建了一个包含 GSMMap 和 collectionView(Horizontal) 的 viewController,就像 google map 一样。我使用下面的代码使项目居中并对齐。
我正在尝试制作一个 segue,将字符串发送到下一个 View Controller 中的变量。此字符串是 Collection View 单元格内标签内的文本,标签内的文本来自 CoreData。当
我在 Collection View Cell 上使用单击来调用 collectionView didSelectItemAt 内的 performSegue。有时特别是当应用程序首次启动时,perf
我已经通过 google 和 stack overflow 进行了查看,但找不到答案。我有一个 UICollectionView 并希望在单击单元格时将用户带到另一个 View 。但在这样做之前,我想
我正在使用委托(delegate)在 UICollectionViewCell 和 UICollectionViewController 之间建立连接。在这方面我想说的是,如果用户点击一个 UIVie
我需要实现一个看起来像附加 gif 的动画。 当您点击一个单元格时,它应该放大,因此单元格之间的间距应该保持不变(单元格不应该重叠)。当您选择另一个单元格时,当前选定的单元格动画到原始大小,新选择的单
我在名为 MyCropView 的 UIView 类中的 collectionView 中有一个传感器列表,我在其中显示了有关该裁剪的一些数据。我试图更改某些传感器的值,例如每次单击时的图标和背景颜色
这个问题在这里已经有了答案: Table view didSelectRowAtIndexPath, only works after selecting second click (1 个回答)
我正在使用 SCLAlertView 创建自定义警报 View 。我的警报 View 包含一个文本字段和彩色单元格的 Collection View 问题是 UICollectionView 的 di
我是一名优秀的程序员,十分优秀!