【发布时间】:2016-08-31 11:35:43
【问题描述】:
这是错误图片:
我的类是 NSTextView 的子类,它支持拖动。但是当我将文本拖到之前的位置时,会有一个粘贴的插入点。
然后我点击其他地方,正常的插入点出现在文本的末尾(这是正确的),
但第一个点并没有自动消失,即使我删除了整个字符串。
NSTextView 中与插入点相关的方法或属性只有 3 个。
@property (readonly) BOOL shouldDrawInsertionPoint;
@property (copy) NSColor *insertionPointColor;
- (void)updateInsertionPointStateAndRestartTimer:(BOOL)restartFlag;
- (void)drawInsertionPointInRect:(NSRect)rect color:(NSColor *)color turnedOn:(BOOL)flag;
第一个是只读的,我尝试了第二个,我设置了白色,拖动时设置为dragActionEnded后的原始颜色。我没有工作。
等待您的解决。 谢谢!
以下是我写的拖拽委托代码。 #pragma mark - 目标操作
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{ /---------------------------------------------- -------- 每当拖动进入我们的拖放区时调用的方法 -------------------------------------------------- ------/
// Check if the pasteboard contains image data and source/user wants it copied
if ([sender draggingSourceOperationMask] & NSDragOperationCopy )
{
//accept data as a copy operation
return NSDragOperationCopy;
}
return NSDragOperationNone;
}
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{
//check to see if we can accept the data
NSURL *fileURL=[NSURL URLFromPasteboard: [sender draggingPasteboard]];
if (fileURL == nil) {
return NO;}
NSString *filePathAndName = [[NSString alloc] initWithUTF8String:[fileURL fileSystemRepresentation]];
if (filePathAndName == nil)
{
return NO;
}
NSString *fileExtension = [[filePathAndName pathExtension] uppercaseString];
if (fileExtension == nil)
{
return NO;
}
if ([fileExtension isEqualToString:@"JPG"] ||
[fileExtension isEqualToString:@"JPEG"] ||
[fileExtension isEqualToString:@"PNG"] ||
[fileExtension isEqualToString:@"GIF"] ||
[fileExtension isEqualToString:@"BMP"])
{
return YES;
}
else
{
return NO;
}
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender{
if ( [sender draggingSource] != self )
{
if ( [[[sender draggingPasteboard] types] containsObject:NSFilenamesPboardType] ) {
NSURL* fileURL=[NSURL URLFromPasteboard: [sender draggingPasteboard]];
NSArray *files = [[sender draggingPasteboard] propertyListForType:NSFilenamesPboardType];
[[NSNotificationCenter defaultCenter] postNotificationName:ZayhuSendPicToPeer object:self userInfo:@{@"filesArray":files}];
}
}
return YES;
}
- (NSString *)preferredPasteboardTypeFromArray:(NSArray *)availableTypes restrictedToTypesFromArray:(NSArray *)allowedTypes{
if ([availableTypes containsObject:NSPasteboardTypeString])
{
return NSPasteboardTypeString;
}
return [super preferredPasteboardTypeFromArray:availableTypes restrictedToTypesFromArray:allowedTypes];
}
【问题讨论】:
-
我试过你的代码。我得到一个例外,并且拖放文本不起作用。修复它,插入点就可以了。
-
if (fileURL == nil) { return NO; } 对不起,我没有检查它,现在,我添加了这一行。它会工作,但问题仍然存在。
-
拖放有效吗?
-
可以拖动,文件类型禁止放置。
标签: objective-c macos cocoa