2017-01-27 3 views
0

내 콜렉션 뷰에 대해 두 번 탭 동작을 만들었습니다. 콜렉션 뷰의 셀을 두 번 탭하면 셀에 대한 사용자 상호 작용이 비활성화됩니다. 이렇게하면 프로세스가 실행되는 동안 셀을 한 번 탭할 수 없게됩니다. 그러나 나는 여전히 프로세스를 다시 실행하는 셀을 두 번 탭할 수 있습니다. 나는 여전히 컬렉션의 다른 셀에서 사용할 수 있도록 이중 탭을 원한다. 나는 단지 프로세스를 실행중인 셀에 대해 비활성화하려고한다. 프로세스가 끝나면 사용자 상호 작용이 다시 켜지고 잘하면 두 번 탭합니다.isUserInteractionEnabled = false 여전히 두 번 누르기 동작 허용

// add gesture recogniser 
    let doubleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap)) 
     doubleTap.numberOfTapsRequired = 2 
     doubleTap.delaysTouchesBegan = true 
    self.collectionView.addGestureRecognizer(doubleTap) 

을 그리고 프로세스의 상태에 따라 필요할 때 그냥 평소와 같이 userInteraction을 전환하고 있습니다 :

그래서 이것은 내가 컬렉션보기를 잡고보기 컨트롤러의 viewDidLoad에서, 더블 탭을 정의하는 방법이다.

콜렉션보기에서 두 번 탭 제스처를 비활성화 한 것처럼 확실하지 않은 방법은 다른 셀을 두 번 탭하지 않습니다. 그리고 나는 그것을 설정하는 방법조차 모르기 때문에 더블 탭은 콜렉션 뷰가 아니라 셀에서만 사용할 수 있습니다.

답변

1

collectionView의 하위보기에서 isUserInteractionEnabled을 사용 중지해도 이벤트는 collectionView (수퍼 뷰)으로 전달됩니다. 따라서 isUserInteractionEnabled은 superviews가 아닌 모든 하위보기에서 터치 이벤트를 비활성화합니다.이 경우에는 collectionView입니다.

  1. 사용자 정의 UICollectionViewCell를 만들고 내부적으로 더블 탭을 처리 한 후 더블 탭 이벤트를 위임하는 UITapGestureRecognizer을 추가

    당신은 진행하기위한 몇 가지 옵션이 있습니다.
  2. didDoubleTap 메서드 내에서 방금 두 번 탭 한 셀이 활성화/비활성화되었는지 확인합니다. indexPathForItemAtPoint:을 사용한 다음 cellForItemAtIndexPath:을 사용하여이 작업을 수행 할 수 있습니다.
+0

감사합니다. 쉬운 옵션을 곧바로 사용하고 if 문을 사용했습니다. 이것은 처음 두 번 탭이 발생했을 때 보이는 셀의 탭 제스처를 비활성화하는 것 같습니다. 대리자 메서드를 잘못 살펴보십시오. – Pippo

+0

사실 그것은 작동합니다. 나는 방금 내 조건을 가지고있었습니다. – Pippo

+0

좋아요! 그것을 듣고 기뻐. –

0

제스처 인식기에서 isEnabled을 false로 설정할 수 있습니다.

UIGestureRecognizerDelegate을 구현하고 gestureRecognizerShouldBegin에서 false를 반환 할 수 있습니다.

관련 문제