Tôi đang cố gắng triển khai kéo và thả từ Trình tìm kiếm vào NSTableView của ứng dụng của tôi. Thiết lập sử dụng một NSTableView
, một bộ điều khiển mảng hoạt động như một nguồn dữ liệu bằng cách sử dụng các kết buộc Cocoa tới một kho lưu trữ dữ liệu lõi.NSTableView và kéo và thả từ Trình tìm kiếm
tôi đã làm như sau, về cơ bản sau bài đăng trên blog khác nhau tôi tìm thấy trên SO và các trang web khác:
Trong awakeFromNib
của bộ điều khiển quan điểm của tôi tôi gọi:
[[self sourcesTableView] registerForDraggedTypes:[NSArray arrayWithObjects: NSPasteboardTypePNG, nil]];
Tôi subclassed NSArrayController và bổ sung như sau các phương thức cho lớp con của tôi (lý do cho phân lớp là trình điều khiển mảng cần phải được thông báo về việc thả vì nó hoạt động như nguồn dữ liệu của chế độ xem bảng):
- (BOOL) tableView: (NSTableView *) aTableView acceptDrop: (id <NSDraggingInfo>) info row: (NSInteger) row dropOperation: (NSTableViewDropOperation)operation
Việc triển khai của tôi đối với những điều trên hiện chỉ ghi vào nhật ký và sau đó trả về giá trị Boolean YES.
- (NSDragOperation) tableView: (NSTableView *) aTableView validateDrop: (id <NSDraggingInfo>) info proposedRow: (NSInteger) row proposedDropOperation: (NSTableViewDropOperation) operation
Trong IB tôi có bộ điều khiển mảng trỏ tới lớp con NSArrayController tùy chỉnh của tôi.
Kết quả: không có gì. Khi tôi kéo PNG từ màn hình sang chế độ xem bảng của mình, không có gì xảy ra và tệp tin vui vẻ bị trả về nguồn gốc của nó. Tôi phải làm điều gì đó sai trái nhưng không hiểu điều gì. Tôi làm sai ở đâu?
Cảm ơn, nhưng chế độ xem bảng vẫn không chấp nhận bất kỳ thao tác kéo/thả nào. Bất kỳ tập tin tôi kéo từ Finder bị trả lại .... Tôi sử dụng kết buộc Cocoa để đính kèm bảng vào nguồn dữ liệu của nó. – Roger
Tôi đã cập nhật câu trả lời của mình. Bạn vẫn cần triển khai đối tượng nguồn dữ liệu. –