我感到困惑,因为这只是一件简单的事情,但是没有用。
这是我在这里写问题之前的核对清单。
UICollectionViewDelegate已注册
上面没有任何内容比#34;调试视图层次结构中的UICollectionView"
isUserInteractionEnabled
的UICollectionView和UICollectionViewCell为true
isAllowsSelection
为true
还有什么我应该看看吗?
=====
class MyView: NibDesignable { // It's UIView with NibDesignableProtocol (https://github.com/mbogh/NibDesignable)
@IBOutlet weak var collectionView: UICollectionView!
override init(frame: CGRect) {
super.init(frame: frame)
self.setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}
private func setup() {
print("test - It's called.")
self.collectionView.dataSource = self
self.collectionView.delegate = self
self.collectionView.isUserInteractionEnabled = true
self.collectionView.isAllowsSelection = true
}
}
extension MyView: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath {
print("test - It's not called")
}
}
我只粘贴了与问题相关的部分,因为所有代码都太长了。
答案 0 :(得分:2)
isUserInteractionEnabled
可能在MyView
本身或其中任何一方的父母身上是假的
答案 1 :(得分:2)
如果您的自定义单元格中有一个actionRecognizer,则可能会发生这种情况。这将覆盖collectionView的didSelectItemAt委托。
如果这是您的问题,那么您可以通过识别gestureRecognizer并执行以下操作来解决此问题:
let tap = UITapGestureRecognizer(target: self, action: #selector(self.someViewInMyCellTapped(_:)))
someViewInMyCell.addGestureRecognizer(tap)
tap.cancelsTouchesInView = false
答案 2 :(得分:1)
确保单元格是UICollectionViewCell
的子类,而不是UICollectionViewReusableView
的子类。
答案 3 :(得分:0)
尝试在
中设置委托func awakeFromNib(){
super.awakeFromNib()
self.collectionView.dataSource = self
self.collectionView.delegate = self }
答案 4 :(得分:0)
如果有人在模拟器XR中遇到与我相同的问题 试用其他模拟器。 使用XR模拟器时,永远不会为某些索引调用我的didSelectItemAt方法,并且每次重新启动模拟器时,索引都是随机的。 使用iPhone 6s模拟器使它消失了
答案 5 :(得分:0)
我将Cell子视图的isUserInteractionEnabled
属性更改为false
。而且有效。
答案 6 :(得分:0)
对我来说,问题出在我的 BaseViewController
上的键盘扩展中extension NewBaseVC: UITextFieldDelegate {
func initializeHideKeyboard(){
let tap: UITapGestureRecognizer = UITapGestureRecognizer(
target: self,
action: #selector(dismissMyKeyboard))
view.addGestureRecognizer(tap)
}
@objc func dismissMyKeyboard(){
view.endEditing(true)
}
}
当我打电话给initializeKeyboard()
时,TapRecognizer
被解雇了。并且拍子识别器与我的收藏夹视图didSelectItemEvent重叠。
答案 7 :(得分:0)
在情节提要中,CollectionView using System.Xml.Linq;
namespace SVG
{
public class SvgElement : XElement
{
private static readonly XNamespace xmlns = "http://www.w3.org/2000/svg";
/// <inheritdoc />
public SvgElement(string name) : base(new XElement(xmlns + name))
{
}
/// <inheritdoc />
public SvgElement(string name, object content) : this(name)
{
this.Add(content);
}
}
}
对我来说是取消选中的。选中 Selectable
后,Collectionview didSelectItemsAt 将调用。
Selectable