2012-10-04 9 views
6

Tôi sắp bị tuyệt vọng cố gắng đạt được điều gì đó đơn giản như vậy.Dừng UITableView tiêu thụ các sự kiện chạm để menu trượt trong chế độ xem chính có thể phát hiện các đường kẻ ngang

Tôi có chế độ xem có menu sử dụng các trang trình bày touchEvents từ bên trái khi được cử chỉ để làm như vậy bằng thao tác vuốt ngang. Tôi không sử dụng các bộ nhận dạng cử chỉ, tôi chỉ sử dụng touchesBegan, touchesMoved, vv .. và theo dõi sự khác biệt tọa độ x giữa vị trí cảm ứng bắt đầu, vị trí giữa và vị trí cảm ứng hoàn thiện. Nó hoạt động tuyệt vời.

Nhưng, khi ở trong cơ thể, tôi có UITableView, các sự kiện chạm không còn tìm cách nâng cấp thứ bậc lên chế độ xem quản lý menu. Tôi đã cố gắng để có được xung quanh này bằng cách đi chạm vào superview/nextResponder, mà loại công trình, nhưng tôi thấy một touchesBegan và 2 touchesMoved cuộc gọi trước khi nó chỉ đơn giản là ngừng được xử lý thêm lên hệ thống phân cấp.

Cụ thể, tôi có một SlideMenuView, trong đó có chế độ xem trình đơn và chế độ xem cơ thể. Bên trong cơ thể xem, tôi có một số điểm UITableView. Tôi thấy (thông qua NSLog) rằng các phương thức * được gọi từ đầu đến cuối. Tôi vượt qua chúng trên để nextResponder và bắt đầu nhìn thấy chúng trong SlideMenuView cũng - nhưng sau khi 2 cuộc gọi đến touchesMoved, họ dường như dừng lại trong SlideMenuView nhưng tiếp tục trong UITableView của tôi.

Tôi ghi đè UITableView để thực hiện việc này, nhưng tôi đã không thay đổi gì bên trong nó.

Tôi biết rằng điều này phải có thể, vì nó nằm trong ứng dụng Facebook. Bạn có thể vuốt bất cứ nơi nào trong cơ thể, có thể cuộn, theo chiều ngang và hiển thị menu. Tôi muốn điều tương tự xảy ra tự nhiên ở đây, nhưng nó xuất hiện như thể có điều gì đó kỳ lạ đang xảy ra, và UITableView đang tiêu thụ hoặc phá hủy các sự kiện.

Ai có thể giúp tôi với điều này không? Ai đó phải đạt được điều này một cách sạch sẽ.

+0

Có lý do nào khiến bạn không thể sử dụng trình nhận dạng cử chỉ không? Tôi nghĩ việc này sẽ dễ dàng hơn nếu bạn có thể làm như vậy. – rdelmar

Trả lời

9

Được rồi, đối với bất kỳ ai quan tâm - tôi đã tìm thấy một giải pháp sạch.

Apple biết họ đang làm gì. Quay lại ngày chúng tôi đã sử dụng để ghi đè touchesBegan, ... nhưng sau đó họ đã giới thiệu GestureRecognizers. Đối với một số điều khiển, chẳng hạn như UIScrollView (và bất kỳ lớp con nào, chẳng hạn như UITableView), chúng dường như bán thịt hệ thống trả lời sự kiện của họ. Tôi đã có lỗi vì giả định rằng Gesture Recognizers không làm bất cứ điều gì đặc biệt và chỉ cần móc vào các phương thức touchesBegan, ... - điều này là không chính xác.

Cách an toàn nhất là sử dụng Gesture Recognizers. Cụ thể, có một số tùy chọn trên chúng có thể tạo ra tất cả sự khác biệt. Chẳng hạn như .cancelsTouchesInView = YES trong trường hợp của tôi.

Vì vậy, những gì tôi đã làm, sử dụng một PanGestureRecognizer trên Chế độ xem Menu, đặt .cancelsTouchesInView thành YES và hoạt động. Tôi sẽ tránh touchesBegan, ... như bệnh dịch hạch, và viết các bộ nhận dạng cử chỉ tùy chỉnh cho mọi thứ phức tạp.

Tôi hy vọng điều này giúp ai đó kéo tóc ra như tôi!