Cho đến hôm nay, tôi chưa bao giờ có dịp sử dụng bất cứ điều gì khác ngoài NSWindow như là một NSDraggingDestination. Khi sử dụng một cửa sổ như một điểm đến kéo dài một kích thước phù hợp với tất cả, NSWindow sẽ chuyển các thông điệp đó cho đại biểu của nó, cho phép bạn xử lý các giọt mà không có phân lớp con của NSWindow.Cocoa NSTextField Kéo & Thả Yêu cầu lớp con ... Thật sao?
Các docs nói:
Mặc dù NSDraggingDestination là khai báo là một giao thức không chính thức, các NSWindow và NSView lớp con bạn tạo thông qua các giao thức cần chỉ thực hiện những phương pháp đó là thích hợp. (Các lớp NSWindow và NSView cung cấp các triển khai riêng cho tất cả các phương pháp .) Đối tượng cửa sổ hoặc đại biểu của nó có thể thực hiện các phương thức này; tuy nhiên, triển khai của đại biểu được ưu tiên nếu có các triển khai ở cả hai địa điểm .
Hôm nay, tôi có một cửa sổ có hai NSTextField trên đó và tôi muốn chúng có các hành vi thả khác nhau và tôi không muốn cho phép các giọt khác ở bất kỳ nơi nào khác trong cửa sổ. Cách tôi giải thích các tài liệu, có vẻ như tôi phải phân lớp NSTextField, hoặc làm cho một số trình xử lý thả spaghetti có điều kiện khổng lồ trên đại biểu của cửa sổ nhấn-kiểm tra kéo Location đối với mỗi khung nhìn để chọn các hành vi thả khác nhau cho mỗi trường.
Phương pháp xử lý thả xuống có trụ sở tại NSWindow tập trung dường như sẽ trở nên nguy hiểm trong bất kỳ trường hợp nào bạn có nhiều hơn một số lần xem điểm đến thả nhỏ. Tương tự như vậy, cách tiếp cận subclassing dường như không quan trọng bất kể trường hợp, bởi vì bây giờ mã xử lý thả sống trong một lớp khung nhìn, vì vậy một khi bạn chấp nhận sự sụt giảm, bạn phải đưa ra một số cách để sắp xếp lại dữ liệu bị bỏ lại cho mô hình. Các bindings docs cảnh báo bạn tắt của cố gắng để lái xe bindings bằng cách thiết lập giá trị giao diện người dùng lập trình. Vì vậy, bây giờ bạn đang mắc kẹt làm việc theo cách của bạn trở lại xung quanh đó quá.
Vì vậy, câu hỏi của tôi là: "Thật sao !? Có phải đó là những lựa chọn duy nhất có sẵn không? Hay tôi thiếu thứ gì đó đơn giản ở đây?"
Cảm ơn.
Bạn nên sửa lỗi đánh máy trong tiêu đề câu hỏi của mình (NSTextView! = NSTextField). – NSGod