如何禁用NSTextField的拖放操作?
我想禁止将任何东西放入我的NSTextField中。在我的应用程序中,用户可以将iCal事件拖放到GUI的不同部分。现在我有一个测试用户不小心将iCal事件放入文本字段 - 但他没有意识到这一点,因为文本插入到我在单行文本字段中看到的那一行上方的行中。 (您可以通过点击文本字段并使用键盘排列一行来显示插入的文本 - 但普通用户不会这样做,因为他/她甚至不会意识到插入了某些东西)如何禁用NSTextField的拖放操作?
我试过registerForDraggedTypes:[NSArray array]]
(似乎没有任何影响)以及实现draggingEntered:
委托方法返回NSDragOperationNone
(委托方法甚至没有被调用)。
任何想法?
编辑:当它集中在his blog并在comments to a blog entry by Daniel Jalkut通过SSP描述当然掉落的东西到一个的NSTextField中,只有工作。
这可能会起作用:如果您将NSTextView继承并实现-acceptableDragTypes
以返回nil
,则文本视图将被禁用为拖动目标。我还必须实现NSDraggingDestination方法-draggingEntered:
和-draggingUpdated:
以返回NSDragOperationNone。
@implementation NoDragTextView
- (NSArray *)acceptableDragTypes
{
return nil;
}
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
{
return NSDragOperationNone;
}
- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
{
return NSDragOperationNone;
}
@end
您是否试过从NSView获得
- (void)unregisterDraggedTypes?
我很高兴你在我的博客文章中发现了评论。我认为他们是发现如何实现你所寻找的东西的冰山一角。
需要注意的是,拖动到NSTextField的原因在它具有焦点时起作用的原因是NSTextField本身被更为丰富,功能更强大的视图(NSTextView)遮挡,该视图被称为“Field编辑。”
退房苹果在球场上的编辑文档的这一部分:
http://developer.apple.com/documentation/Cocoa/Conceptual/TextEditing/Tasks/FieldEditor.html
要实现你追求什么,我想你可能需要拦截的标准计提的字段编辑器的你NSTextFields,通过实施窗口的委托方法:
windowWillReturnFieldEditor:toObject:
这让你有机会要么调整上个配置e NSTextView,或者提供一个全新的字段编辑器对象。
在最坏的情况下,您可以提供您自己的NSTextView子类作为字段编辑器,该编辑器旨在拒绝所有拖动。
我能够通过创建自定义NSTextView并实现进入和退出NSDraggingDestination协议方法来设置NSTextView隐藏来解决此问题。一旦文本字段是隐藏在上海华将能够赶上拖/丢弃事件,或者如果上海华不执行或想拖/放他们被丢弃
例如:
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender {
//hide so that the drop event falls through into superview's drag/drop view
[self setHidden:YES];
return NSDragOperationNone;
}
- (void)draggingExited:(id<NSDraggingInfo>)sender {
//show our field editor again since dragging is all over with
[self setHidden:NO];
}
我终于来试试这个(我同意文档听起来好像这应该做的工作)。 所以在我的控制器的awakeFromNib中,我在我的NSTextField插座上调用unregisterDraggedTypes。然而这似乎没有任何效果......我仍然可以将东西拖入我的领域。 – 2009-03-04 14:17:29
你是否在调试器中检查了你的插座,以确认它在调用unregisterDraggedTypes时连接了而不是NULL? – Mark 2009-03-04 14:51:37