2012-02-24 33 views
0

我在NSCollectionViewItem的视图上有一个NSTextFieldNSCollectionViewItem在NSTextField后面

当您单击NSCollectionViewItem时,该项目被选中。

当您单击NSTextField时,它获得焦点,但在文本字段后面的NSCollectionViewItem未被选中。

我想改变这最后的行为,所以文本字段获得焦点和视图项目也被选中。

这样做的最好方法是什么?

+0

对不起,我现在不记得了,但是有一个特殊的设置让视图(包括TextField)对鼠标事件“透明”,并在处理它们时将它们传递给响应者链。只是不记得确切的设置。 – 2014-06-18 08:27:35

回答

1

我相信你将不得不继承的NSTextField和覆盖鼠标按下传递事件到nextResponder(应设为您的收藏视图)

+0

这给了我最多的方式。你需要重写mouseDown,并且我找不到一种对事件作出反应的方法。所以我选择使用命令键决定是否将事件传递给nextResponder或文本字段的原始mouseDown事件。如果我打电话都有奇怪的行为。 – 2012-02-25 21:20:40

0

我也有一个包含的NSTextField的NSCollectionViewItem。我试图重新创建Finder中图标的文本标签的基本外观和感觉。我还没有完成它,但我迄今为止似乎回答了这个问题。

关键是让文本字段以不可选的方式开始。文本字段上的鼠标单击将被文本字段忽略,并将选择集合视图项目。然后在集合视图项目的setSelection方法中,选择它时,将文本字段设置为可编辑。下一个鼠标点击文本字段将使其焦点。然后,在取消选择集合视图项目时,将文本字段设置为不可选,并等待集合视图项目再次被选中。

-(void)awakeFromNib 
{ 
    [self.textField setSelectable:NO]; 
} 

-(void)setSelected:(BOOL)selected 
{ 
    [super setSelected:selected]; 

    if (self.selected) 
    { 
     [self.textField setEditable:YES]; 
    } 
    else 
    { 
     [self.textField setSelectable:NO]; 
    } 
} 

这回答了上述问题,但显然,更多的是需要一个完整的解决方案。