मैं एक कस्टम दृश्य लिख रहा हूं जिसे फ़ोल्डर बूंदों को स्वीकार करने की आवश्यकता है। शर्त है: केवल निर्देशिका स्वीकार की जाती है, इसलिए जब उपयोगकर्ता फ़ाइल को ड्रैग करता है तो कुछ भी नहीं होना चाहिए।खींचें और छोड़ें - केवल फ़ोल्डर्स स्वीकृत
मैं साथ मेरे विचार पंजीकृत कर लिया है:
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
और बुनियादी खींचने प्रोटोकॉल तरीकों को पहले से ही लागू किया जाता है। परीक्षण प्रयोजनों के लिए:
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
{
NSLog("@Drag Entered");
return NSDragOperationCopy;
}
- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
{
return NSDragOperationCopy;
}
- (void)draggingExited:(id<NSDraggingInfo>)sender
{
NSLog(@"Dragging Exited");
}
- (BOOL)prepareForDragOperation:(id<NSDraggingInfo>)sender { return YES; }
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender { return YES; }
तो यह लगभग सही ढंग से काम करता है: जब दृश्य में खींच कर्सर के लिए धन चिह्न हो जाता है। हालांकि मैं इससे बचना चाहूंगा कि आइटम एक नियमित फाइल है।
मैं शायद कि NSFileManager साथ (हालांकि मुझे आश्चर्य है कि अगर वहाँ एक आसान तरीका है) एक बार मैं घसीटा पथ मिलता है, लेकिन सवाल यह है कि जहां करने की आवश्यकता होगी। मैंने बिना किसी सफलता के NSDragOperationNone लौटने की विधि draggingEntered:
विधि में परीक्षण अधिकार शामिल करने का प्रयास किया है। मैं एप्पल प्रलेखन से एक टुकड़ा अनुसरण कर रहा हूं:
{
NSPasteboard *pboard = [sender draggingPasteboard];
if ([[pboard types] containsObject:NSFilenamesPboardType]) {
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
int numberOfFiles = [files count];
// Perform operation using the list of files
}
return YES;
}
मैं कहाँ इस परीक्षण को लागू करना चाहिए, ताकि कर्सर ही रहता है, तो एक फ़ाइल के बजाय घसीटा जाता है?
ओह मैन, जैसा कि मैंने पाठ में कहा था, मैंने पहले से ही 'ड्रैगिंगएन्टर:' में परीक्षण लागू किया था, लेकिन 'ड्रैगिंग अपडेटेड:' के साथ बिंदु को याद किया। बस इसे हटा दिया। आपका बहुत बहुत धन्यवाद! – sidyll
आदर्श रूप से, एक अलग विधि में, बिल्कुल एक बार परीक्षण को कार्यान्वित करें, और अपने आप को उस संदेश को 'ड्रैगिंगइंटर:' और 'ड्रैगिंग अपडेटेड:' से भेजें। –