2014-07-21 17 views
6

Tôi đang viết một phần mở rộng bàn phím tùy chỉnh cho iOS 8 trong Swift và tôi gặp sự cố khi triển khai lớp phủ scribble kiểu Swype. Ngay bây giờ, bàn phím của tôi có một cơ sở UIView (thuộc tính view của số UIInputViewController) có số lượng UIButtons tương ứng với các phím trên bàn phím. Mỗi phím này phản hồi các sự kiện touchUpInside và có UISwipeGestureRecognizers các ký tự phụ đầu vào khi vuốt lên hoặc xuống. Tôi đã ghi đè touchesBegan:withEvent: để thêm chế độ xem lớp phủ scribble của tôi dưới dạng tiểu sử và touchesEnded:withEvent: để xóa chế độ xem lớp phủ scribble của tôi trong UIInputViewController.Làm cách nào để chặn các sự kiện chạm?

Hiện tại, nếu tôi cố viết nguệch ngoạc bắt đầu từ một số khoảng cách giữa các nút, chế độ xem lớp phủ scribble sẽ xuất hiện chính xác. Tuy nhiên, nếu tôi bắt đầu viết nguệch ngoạc từ trên đầu trang của một UIButton, các UIButton nắm bắt các sự kiện liên lạc và không chuyển tiếp nó để UIInputViewController của tôi.

Làm cách nào để triển khai bàn phím của mình theo cách mà chế độ xem lớp phủ scribble của tôi xuất hiện nếu người dùng viết nguệch ngoạc giữa các nút, nhưng nút xử lý nhấn/vuốt khác?

--EDIT--

Tôi đã cố gắng để giải quyết này bằng cách ghi đè các touchesBegan/Moved/Ended/Cancelled phương pháp để chuyển tiếp sự kiện này vào trả lời tiếp theo. Nếu tôi bấm vào một nút và sau đó bấm vào một nút khác, tôi có thể nhận được một scribble xuất hiện giữa hai. Tuy nhiên, tôi vẫn không thể có được bất cứ điều gì để vẽ trên nút như một scribble giữa các nút. Bất cứ ai có một ý tưởng tốt hơn?

--edit # 2--

Hiện nay, hệ thống phân cấp quan điểm của tôi được thiết lập như thế này: UIView (từ UIInputViewController) subviews: Tất cả các nút của tôi, sau đó tôi ScribbleView bao phủ rộng subviews.

Nếu tôi đặt userInteractionEnabled thành true trên ScribbleView, tôi có thể viết nguệch ngoạc xuất hiện ở mọi nơi, bất kể vị trí bắt đầu, nhưng sau đó tôi mất chức năng nút.

Đối với mã nguồn, tôi đã thử nghiệm với các cấu hình khác nhau của các sự kiện chạm và không biết, nhưng phần chính của mã có thể được tìm thấy tại đây: https://github.com/Kamaros/ELDeveloperKeyboard.

Trả lời

0

Tôi đoán ở đây, vì tôi chưa thử làm việc với UIInputViewControllers. Nhưng làm thế nào về subclassing UIButton và sau đó ghi đè các phương thức touchesBegan:withEvent:touchesEnded:withEvent: để chuyển tiếp các sự kiện này tới UIInputViewController của bạn?

+0

Chắc chắn là một tùy chọn, mặc dù tôi không chắc chắn cách thức này sẽ hoạt động cùng với bộ nhận dạng cử chỉ mà tôi đã gắn với mỗi nút. Giá trị cố gắng mặc dù, nếu không ai nghĩ về bất cứ điều gì thông minh hơn. – Kamaros

+0

Vì bạn đang nhận được các scribble giữa các nút (và không phải trên các nút), không phải là nó chỉ là một vấn đề của hệ thống phân cấp xem? Ý tôi là, không phải bạn đang vẽ bên dưới nút đó sao? Một lần nữa, nó chỉ là một đoán vì tôi không có quyền truy cập vào mã của bạn. Ngoài ra, nếu bạn đang vào kludges, bạn luôn có thể đặt một UIView trống trên tất cả các nút và vẽ trên nó, thay vì vẽ bất cứ nơi nào bạn đang vẽ bây giờ. –

0

Tôi nghĩ bạn cần đặt giao diện ScribbleView của mình thành Bật và chuyển tiếp đến nút bên dưới touchEvents bạn không muốn. Ví dụ: nếu bạn nhận ra một báo chí dài ở cùng một vị trí hoặc một lần nhấn thì bạn biết người dùng muốn nhấn nút.

Các vấn đề liên quan