2014-07-11 19 views
10

Tôi có một mặt hàng khác nhau trong đó. Khi tôi nhấn vào một mục, tôi sử dụng:Cách nhận các lần chạm trên UICollectionView trong khoảng trống xung quanh tất cả các ô

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 

để tìm hiểu điều gì đã được chạm và sau đó đặt cơ bản alpha của chế độ xem đó thành 0 để ẩn nó. Tất cả đều hoạt động tốt. Bây giờ điều tôi muốn làm là khi bạn chạm vào khoảng trắng xung quanh tất cả các khung nhìn của UICollectionViewCell rồi xuất hiện lại. Tôi đang gặp khó khăn khi tìm một phương pháp cho phép tôi biết khi khoảng trắng xung quanh các tế bào bị chạm vào. Có cách nào tốt để làm điều đó không? Tôi đã thử thiết lập trình nhận dạng cử chỉ, nhưng khi tôi làm như vậy, phương pháp của tôi

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 

không được gọi. Có cách nào để chỉ cần thực hiện các công nhận cử chỉ và từ đó xác định xem một tế bào đã được khai thác và nếu như vậy ẩn tế bào đó, khác hiển thị tất cả các tế bào ẩn? Cảm ơn.

+0

Tôi khuyên bạn nên sử dụng chế độ xem trang trí và lắng nghe khi đó vì chúng nằm phía sau cel l. –

+0

chế độ xem trang trí chính xác là gì. Tôi có một cái nhìn đằng sau collectionView nhưng nó sẽ không đăng ký chạm.Tôi phải bằng cách nào đó vượt qua các liên lạc để xem nền khi họ không chạm vào một tế bào và tôi không biết làm thế nào để làm điều đó –

Trả lời

0

Phương thức ủy nhiệm didSelectItem sẽ chỉ được gọi khi người dùng chọn collectionViewCell. Khoảng cách giữa các ô có thể thay đổi tùy thuộc vào từng Kích thước ô, bạn có thể chỉ định khoảng cách nhỏ nhất. Để nhận được các chạm giữ cho bổ sungXem dưới dạng backgroundView bằng cách thay đổi zindex của nó, hãy thêm phát hiện cảm ứng vào đó. Hy vọng điều này sẽ giúp bạn. :)

+0

phải vì vậy tôi đã cố gắng để làm điều đó vấn đề là các chạm không được truyền qua cho backgroundView –

15

Tôi đã cố gắng khắc phục vấn đề này bằng cách sử dụng UITapGestureRecognizer trên UICollectionViewbackgroundView. Đó là trong Swift, nhưng ý tưởng là rõ ràng:

self.tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:") 
self.tapGestureRecognizer.delegate = self 

self.collectionView.backgroundView = UIView(frame:self.collectionView.bounds) 
self.collectionView.backgroundView!.addGestureRecognizer(tapGestureRecognizer) 

Và callback:

func handleTap(recognizer: UITapGestureRecognizer) { 
    // Handle the tap gesture 
} 
+0

Ý tưởng rất hay! Cảm ơn! – nonamelive

3

tôi chạy vào một kịch bản tương tự trong dự án của tôi và giải quyết nó bằng cách làm như sau:

let tapGestureRecogniser = UITapGestureRecognizer(target: self, action: #selector(handleTapEmptySpaceGesture)) 
tapGestureRecogniser.delegate = self 
collectionView.addGestureRecognizer(tapGestureRecogniser) 

Triển khai giao thức UIGestureRecognizerDelegate

Sau đó, thực hiện chức năng sau trong giao thức:

func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool { 
    // only handle tapping empty space (i.e. not a cell) 
    let point = gestureRecognizer.locationInView(collectionView) 
    let indexPath = collectionView.indexPathForItemAtPoint(point) 
    return indexPath == nil 
} 

Về cơ bản nếu nhấp chuột trên ô thì trình nhận dạng cử chỉ của bạn không bắt đầu, cho phép chọn/bỏ chọn đại biểu bình thường. Nếu không, nếu nó ở trên vùng trống, trình nhận dạng của bạn sẽ xử lý vòi và chạy trình xử lý của nó.

+0

Điều này hoạt động hoàn hảo! Cảm ơn! –

0

này làm việc cho tôi trên Swift 2.3

Bước 1: Thực hiện các giao thức UIGestureRecognizerDelegate

Bước 2: Set UITapGestureRecognizer trên UICollectionView backgroundView

Bước 3: Xử lý phải làm gì trên máy bên handleTap chức năng

class namScreenVcc: UICollectionViewController, UIViewControllerTransitioningDelegate, UIGestureRecognizerDelegate 
{ 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))) 
     tapGestureRecognizer.delegate = self 

     collectionView!.backgroundView = UIView(frame: collectionView!.bounds) 
     collectionView!.backgroundView!.addGestureRecognizer(tapGestureRecognizer) 
    } 

    func handleTap(recognizer: UITapGestureRecognizer) 
    { 
     // Handle the tap gesture 
    } 
} 
Các vấn đề liên quan