Seret dan lepas animasi dari NSTableView ke NSTextView jendela lain akan kembali ke tampilan sumber, bukan ke tampilan teks. Jika tidak, tindakan seret dan lepas berfungsi dengan baikādata saya akan ditempel. Subkelas NSTextView saya memiliki semua metode protokol drag-and-drop (lihat kode di bawah). Apa yang salah?
- (void)awakeFromNib { // Adjust default insets
[self setTextViewInset];
[self registerForDraggedTypes:[NSArray arrayWithObjects:AWNDragNDropGeneralRuleRecordType, nil]];
[self registerAsObserver];
}
- (void)registerAsObserver
{
[self addObserver:scrollerSubclass
forKeyPath:@"focused"
options:NSKeyValueObservingOptionNew
context:NULL];
}
- (BOOL)acceptsFirstResponder
{
NSLog(@"Accepting");
[self setFocused:YES];
return YES;
}
- (BOOL)resignFirstResponder
{
NSLog(@"Resigning");
[self setFocused:NO];
[super resignFirstResponder]; // Otherwise cursor remains in textView
return YES;
}
- (BOOL)becomeFirstResponder
{
NSLog(@"Becoming");
return YES;
}
- (void)setFocused:(BOOL)x
{
NSLog(@"-setFocused: is called with %d",x);
focused = x;
}
- (BOOL)focused
{
NSLog(@"-focused: is returning %d",focused);
return focused;
}
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{
NSLog(@"prepareForDragOperation YES");
return YES;
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
NSLog(@"draggingEntered:");
if ([sender draggingSource] == self) {
return NSDragOperationNone;
}
return NSDragOperationCopy;
}
- (void)draggingExited:(id <NSDraggingInfo>)sender
{
NSLog(@"Draging Exited:");
[self setNeedsDisplay:YES];
}
- (void)draggingEnded:(id < NSDraggingInfo >)sender
{
[self performDragOperation:sender];
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{ // Look for drag source in 'SpellRuleFiles.SpellRulesWindowDelegate tableView delegate method
NSPasteboard *pb = [sender draggingPasteboard];
if (![self readFromPasteboard:pb]) {
NSLog(@"Error: Could not read from dragging pasteboard");
NSLog(@"performDragOperation NO");
return NO;
}
NSLog(@"performDragOperation YES");
return YES;
}
- (BOOL)readFromPasteboard:(NSPasteboard *)pb
{ // Source of paste data is 'SpellRuleFile's '
// I'm not showing this code
return YES;
}
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
{
NSLog(@"conclude drag operation:");
[self setNeedsDisplay:YES];
}