2010-01-10 30 views
5

Tôi đang cố gắng viết một số mã vạch hoàn toàn để tôi có thể kéo tệp 'dot.txt' đơn giản lên NSWindow và đọc dữ liệu (và tất cả các ví dụ mà tôi đã có thể tìm thấy sử dụng hình ảnh và NSViews vv .. Phần 'Kéo nội dung tệp' của Apple trong tài liệu "Kéo và thả chủ đề lập trình cho Cocoa" của nó xác nhận rằng kéo lên đồng bằng NSWindow (chứ không phải là một NSView vv) là có thể và dường như để thảo luận chính xác những gì tôi đang cố gắng để làm, nhưng là một newbie tương đối tôi vẫn tìm thấy tham chiếu đến hình ảnh và khung khó hiểu.Làm cách nào để kéo và thả tệp '.txt' trong obj-c

Bất kỳ ai cũng có thể giúp tôi bắt đầu bằng cách hiển thị cho tôi vị trí 'registerForDraggedTypes' khác với phương pháp 'initWithFrame' hoặc 'initWithCoder' và loại đăng ký nào? Một khi tôi nhận được cửa sổ để nhận ra kéo của tôi, tôi có thể lo lắng về công cụ 'performDragOperation' và 'draggingEntered' khác sau đó.

Cảm ơn :-)

Trả lời

6

Đây là một phần mã mà tôi đang làm việc. Bạn có thể tìm thấy phương pháp này khi bạn tạo một dự án mới.

-(void)applicationDidFinishLaunching:(NSNotification*)aNotification 
{  
    [window registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]]; 
} 

Tôi cũng là người mới. Dù sao, điều này làm việc cho tôi.

Và sau đó, điều này là quan trọng. Chúng tôi phải kết nối đối tượng này với đối tượng cửa sổ để xử lý tin nhắn thả trong đối tượng này

Mở MainMenu.xib và Trình tạo giao diện sẽ bật lên. Trong bộ dựng giao diện, kết nối 'App Delegate' (đối tượng này) với 'delegate' outlet của 'Window'. (Bạn có thể tìm thấy lối ra 'đại biểu' trong bảng Thanh tra) Bây giờ, 'App Delegate' nhận các thông báo sự kiện của 'Window'.

Và sau đó, bổ sung thêm phương pháp hơn tại cùng một tập tin lớp:

-(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender 
{ 
    return NSDragOperationGeneric; 
} 
-(BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender 
{ 
    NSPasteboard* pbrd = [sender draggingPasteboard]; 
    // Do something here. 
    return YES; 
} 
+0

Đây là OK đối với trường hợp cụ thể mà bạn có một đại biểu ứng dụng trong đó có một 'ổ cắm window', nhưng thường là một cửa sổ sẽ được quản lý bởi một 'NSWindowController' và bạn sẽ đăng ký các loại kéo trong phương thức' -windowDidLoad' của trình điều khiển cửa sổ. Câu trả lời là chính xác mặc dù nói chung. –

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