Ну, я понял, как сделать это, но вместо кнопок, которые я использовал в качестве UITapGestureRecognizer rounak предлагает:
let tapGesture = UITapGestureRecognizer(target: self, action: "collectionViewDidReceiveTap:")
tapGesture.delegate = self
self.collectionView.addGestureRecognizer(tapGesture)
Как я хотел конкретный прямоугольник, чтобы быть «tapable» Я реализован UIGestureRecognizerDelegate протокол, этот кусок кода сделать это:
public func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
let collectionViewCurrentCell = self.collectionView.layoutAttributesForItemAtIndexPath(NSIndexPath(forItem: Int(self.currentPage), inSection: 0))
let cellFrameInSuperview = collectionView.convertRect(collectionViewCurrentCell!.frame, toView: self)
if gestureRecognizer.isKindOfClass(UITapGestureRecognizer) && CGRectContainsPoint(cellFrameInSuperview, touch.locationInView(self)) {
return false
}
return true
}
где cellFrameInSuperview должна быть область, где TapGesture не должен ничего делать. Но отличается от UIButton, свиток продолжает работать во всех границах коллекции.
Если у вас есть какие-либо вопросы о том, как и почему это работает, оставьте комментарий.
Ну, хорошо, я использовал его, он работает, но теперь я потерял вызов «didSelectItemAtIndexPath» моей коллекцииView Delegate – RodolfoAntonici