2017-01-22 8 views
1

컬렉션보기에 doubleTap 제스처 또는 다른 기능을 추가하여 선택한 셀에 첨부 된 파일을 다운로드하려고합니다.TapGesture within collectionView

나는 두 번 탭 제스처 인식기가 작동하고 콜렉션 뷰 내부를 두 번 탭하면 포인트가 인쇄됩니다. 그러나 셀을 두 번 탭하면 내장 된 제스처 인식기가 적용되고 didSelectItemAt가 실행됩니다.

didSelectItemAt에서 코드를 트리거하지 않고 두 번 탭을 추가하는 방법이 있습니까 ?? 또는 viewController에 단추를 추가하지 않고도이 기능을 구현할 수있는 다른 방법에 대한 아이디어가 있습니까?

let doubleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap)) 
    doubleTap.numberOfTapsRequired = 2 
    self.collectionView.addGestureRecognizer(doubleTap) 

그리고 내 doubleTap 기능 : : 참고로

func didDoubleTap(gesture: UITapGestureRecognizer) { 

    let point: CGPoint = gesture.location(in: self.collectionView) 

    print(point) 

    if let selectedIndexPath: IndexPath = self.collectionView.indexPathForItem(at: point) { 
     let selectedCell: UICollectionViewCell = self.collectionView.cellForItem(at: selectedIndexPath as IndexPath)! 
     print("cell \(selectedCell) was double tapped") 
    } 
} 

, 내가 시도

내가 컬렉션 뷰를 가지고의 ViewController의있는 viewDidLoad에서 함께 연주하고있는 제스처 코드 이 셀 자체에 추가하지만 작동시키지 못했습니다. 셀은 사용자 지정 UICollectionViewCell이며 viewDidLoad 함수가 없으므로 제스처를 만들려면 컬렉션 뷰를 보유하는 viewController에서 제스처를 설정하는 코드를 호출하는 대리자를 만들어야하고 오류가 발생했습니다.

답변

1

제스처 인식기에서 delaysTouchesBegan = true을 시도 할 수 있습니다. 이렇게하면 didSelect이되는 터치 처리가 지연되고 제스처 인식기에서 동작을 수행합니다.

+0

감사합니다. 좋은 간단한 해결책입니다. – Pippo

0

cellForRowAtIndexpath 데이터 소스 방법의 모든 셀에 탭 제스처 인식기를 추가해야합니다.