Tôi có một số UIView
trong đó tôi đã thêm UITapGestureRecognizer
. Bên trong quan điểm đó tôi cũng có một subview, trong đó về cơ bản là một số loại UITableView
. Câu hỏi đặt ra là tại sao không phải là UITableView
nhận ra các vòi nước trên một hàng, thay vào đó nó đi đến xử lý của bộ nhận dạng cử chỉ của tất cả các thời gian. Tại sao điều này, và làm cách nào để giải quyết vấn đề này? Nếu tôi đặt số lượng vòi thành 2, thì nó hoạt động tốt. Bất kỳ ý tưởng về cách giải quyết này? Về cơ bản nó không gọi là didSelectRowAtIndexPath
.Xung đột UITapGestureRecognizer trong UIView và cho UITableView
Trả lời
Đặt cancelsTouchesInView
trình nhận dạng của bạn thành NO
. Nếu không, nó "tiêu thụ" các liên lạc cho chính nó, và không vượt qua nó vào xem bảng. Đó là lý do tại sao sự kiện lựa chọn không bao giờ xảy ra.
Nếu bạn muốn cả bạn UITableView
vàUITapGestureRecognizer
của bạn để nhận các sự kiện liên lạc, sau đó có các cancelsTouchesInView = NO
sẽ làm việc. Nếu bạn muốn trình nhận dạng cử chỉ chạm không nhận được các sự kiện chạm có nghĩa là cho chế độ xem bảng, nó hơi dễ dàng hơn nhưng rất có thể thực hiện được.
Về cơ bản khi bạn đang tạo trình nhận dạng cử chỉ, bạn đặt mình là đại biểu của nó. Sau đó, bạn triển khai phương thức ủy quyền gestureRecognizer:shouldReceiveTouch:
. Việc triển khai cơ bản có thể trông như thế này.
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
UITableView *tableView = self.tableView;
CGPoint touchPoint = [touch locationInView:tableView];
return ![tableView hitTest:touchPoint withEvent:nil];
}
Về cơ bản phương pháp này (như thực hiện) yêu cầu các tableView
nếu vị trí của cảm ứng này nằm trong thẩm quyền của tableView
, và nếu có, nó sẽ ngăn chặn việc nhận dạng cử chỉ từ khi nhận được liên lạc ... cho phép tableView
để nhận được liên lạc.
Chúng ta không thể làm điều này đơn giản hơn nhiều bằng cách thay đổi dòng 3 và 4 thành:' CGRect frame = self.tableView.frame; CGRectContainsPoint (khung, vị trí); '? – Aufwind
@Aufwind Cảm ơn bạn đã chỉ ra mã tính toán quá phức tạp của mình. Tôi phải vội vã trả lời câu hỏi này quá nhiều. 'CGRectContainsPoint()' chắc chắn là một cách tốt hơn để xử lý phép tính này sau đó ban đầu tôi đã chọn. Tuy nhiên tôi đã chỉnh sửa câu trả lời của mình để sử dụng 'hitTest: withEvent:'. Đó sẽ là phương pháp ưa thích của tôi vì một vài lý do. Một trong số đó sẽ là một cái nhìn không định hình. Nếu một khung nhìn được trình bày dưới dạng hình dạng bất thường (ví dụ một vòng tròn chỉ xử lý các điểm chạm trong vùng vòng tròn). Trường hợp này sẽ không được xử lý đúng bởi các tính toán thủ công mà tôi đã thực hiện. Cảm ơn một lần nữa. – NJones
Bạn được chào đón. :-) – Aufwind
- 1. Hai UITapGestureRecognizer ở trên UIView
- 2. iPhone iOS cách thêm UILongPressGestureRecognizer và UITapGestureRecognizer vào cùng một điều khiển và ngăn chặn xung đột?
- 3. Xung đột Enum và Xung đột đặt tên thuộc tính
- 4. UITapGestureRecognizer không kích hoạt trên UIView Subclass
- 5. Xung đột đặt tên và thuộc tính
- 6. Xung đột: lỗi xung đột cơ sở dữ liệu
- 7. Xung đột UIPanGestureRecognizer với scrollview
- 8. Xung đột cú pháp Jinja và javascript?
- 9. tại sao kendo.web.min.js và kendo.dataviz.min.js xung đột?
- 10. MouseDown và Nhấp chuột xung đột
- 11. Git xung đột dấu
- 12. Reference xung đột
- 13. Xung đột jQuery & Prototype
- 14. xung đột đối chiếu
- 15. C++ lớp mẫu xung đột
- 16. git tìm thấy số xung đột/danh sách xung đột trong thư mục làm việc
- 17. Xung đột GITHUB Giải quyết
- 18. Hội đồng nào xung đột trong "xung đột giữa các phiên bản khác nhau"?
- 19. mod_jk xung đột với mod_rewrite
- 20. JsTree xung đột với jquery.validate
- 21. Jquery không có xung đột
- 22. Kết hợp xung đột trong .gitignore
- 23. phát hiện xung đột trong cocos2d
- 24. Kết hợp xung đột Git
- 25. jQuery .focusout/.click xung đột
- 26. SVN Merge xung đột trong phạm
- 27. xung đột đặt tên hàm
- 28. Giải quyết xung đột trong git
- 29. lỗi Build - 'System.Web.Mvc.ModelClientValidationRule' Xung đột
- 30. Xung đột với `git rebase`
[Đặt giá trị này thành 'NO' chỉ thị trình nhận dạng phân phối tất cả các lần chạm đến khung nhìn cơ bản, ngay cả khi nó đã nhận ra chuỗi.] (Http://developer.apple.com/library/IOs/#documentation/ UIKit/Tham khảo/UIGestureRecognizer_Class/Tham khảo/Tham khảo.html) – dasblinkenlight
mã ví dụ 'longPressGestureRecognizer.cancelsTouchesInView = NO;' (cảm ơn bạn dasblinkenlight) – tmr
@ dasblinkenlight vẫn không hoạt động cho tôi, tôi không thể thực hiện các sự kiện chạm trên ô xem bảng của mình, tôi không thể chọn các mục từ ô xem bảng, tôi đã sử dụng 'func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 'nhưng các mục không nhận được lựa chọn –