2012-02-23 12 views
5

Ứng dụng của tôi có xu hướng mất theo dõi những gì mà người trả lời nên xử lý một sự kiện cảm ứng.Sự kiện UIButton không được xử lý 1% thời gian: tôi nên đổ lỗi cho ai trong chuỗi trả lời của tôi?

tình hình của tôi:

  • một file XIB xác định 3 điểm:
    • một cái nhìn như quan điểm của tập tin của chủ sở hữu xem
    • 2 bổ sung được thêm vào quan điểm phân cấp lập trình
  • Một trong các chế độ xem phụ (SubviewA) có UIButton, được định cấu hình để gửi bộ chọn myAction: tới FirstResponder khi "Touch Up Inside" Sự kiện này được phát hiện
  • SubviewA biết làm thế nào để xử lý myAction:

99% thời gian, mọi thứ diễn ra tốt đẹp. Khi người dùng chạm vào nút, SubviewA sẽ xử lý thông báo myAction: và mọi thứ đều ổn. Nhưng đôi khi, người dùng phàn nàn rằng nút "đóng băng" và tôi thực sự tự sao chép nó một vài lần mà không thể tìm thấy một kịch bản rõ ràng để làm cho nó xảy ra theo yêu cầu.

điều tra của tôi cho đến nay là:

  • khi không có gì xảy ra khi nhấn vào nút:
    • nút của tôi phát hiện vòi nguyên nhân nó được nhấn mạnh khi ép
    • myAction: không được gọi vào SubviewA
    • phần còn lại của giao diện người dùng vẫn đáp ứng

Mã tôi đang nói đến là một số mã cũ mà tôi đang cố khắc phục. Có chế độ xem phản hồi sự kiện cho một trong các cuộc phỏng vấn của nó giống như một kiến ​​trúc kỳ lạ đối với tôi. Cho đến nay, tôi luôn sử dụng Chủ sở hữu tệp để xử lý các sự kiện liên lạc, vì vậy tôi đã chỉ ra Chuỗi phản hồi là lý tưởng chịu trách nhiệm về lỗi này. Nhưng tôi không thể tìm thấy lý do tại sao! Từ sự hiểu biết của tôi, như nút không biết làm thế nào để xử lý tin nhắn và không có bộ điều khiển xem kèm theo nó, nó nên chuyển tiếp nó đến superview của nó (ButtonA, mà biết làm thế nào để xử lý nó)!

Câu hỏi của tôi là:

  • bất kỳ ý tưởng về nơi mà các lỗi có thể đến từ đâu? (chuỗi trả lời?)
  • bất kỳ nhận xét nào về việc liệu chế độ xem có nên xử lý các hành vi nút của chính nó hoặc nếu trình điều khiển chế độ xem nên thực hiện điều đó không?

Chỉnh sửa: Tôi có ý tưởng về cách khắc phục lỗi: kết nối thao tác nút thẳng với SubviewA thay vì sử dụng FirstResponder trong bộ dựng giao diện. Lý do tại sao tôi đăng câu hỏi này là cố gắng hiểu tại sao chuỗi trả lời lại không hoạt động theo thời gian.

+0

Rất vui khi thấy một số mã ... – tarmes

+0

Không có mã .m: chỉ là các tệp XIB, không thực sự dễ chia sẻ. –

Trả lời

1

Bạn có thể chỉ làm cho SubviewA trở thànhFirstResponder và sau đó từ bỏ nó khi hoàn tất?

+0

Kế hoạch của tôi để khắc phục lỗi của tôi là kết nối Nút Hành động trực tiếp với SubviewA thay vì sử dụng FirstResponder trong Trình tạo giao diện. Những gì tôi muốn biết là TẠI SAO nó không hoạt động với FirstResponder. –

1

Khi chạm được xử lý trong chế độ xem phụ, thông thường chúng không được truyền qua chuỗi. Vì vậy, ví dụ nếu bạn đang bắt chạm vào bộ điều khiển chế độ xem của chế độ xem nội dung, bạn sẽ nhận được chạm trên UILabel vì nó không bắt được chúng. Những sự kiện đó được chuyển đến khung nhìn nội dung và sau đó đến bộ điều khiển. Nhưng bạn sẽ không nhìn thấy bất kỳ chạm trên UIButton kể từ khi lớp học bắt chúng (nhớ UIButton diễn giải một số chuỗi liên lạc, không chỉ touch-up-bên trong).

Vì lý do này, bạn cần phải phân lớp UIButton để xem các lần chạm. Khi bạn làm điều đó, hãy chắc chắn để luôn luôn vượt qua các sự kiện để các lớp siêu khi bạn đang thực hiện với họ, khác UIButton sẽ không hoạt động chính xác. Xem Ghi chú phân lớp trong số UIControl Class Reference. Ngoài ra hãy xem Control Events in that reference, cũng như một số phương pháp thể hiện để đảm bảo bạn thực sự cần nắm bắt các điểm nhấn trong mã của bạn. Lưu ý ví dụ, UIButton kế thừa khả năng theo dõi các chạm từ UIControl.

+0

câu trả lời của bạn có ý nghĩa nhưng bỏ lỡ điểm của câu hỏi của tôi: tập tin xib của tôi đã nói rõ ràng nút của tôi để gọi myAction trên trả lời đầu tiên cho một sự kiện touch-up-bên trong. Vì vậy, tại sao nó bỏ lỡ nó đôi khi? –