我在NSCollectionViewItem
的视图上有一个NSTextField
。NSCollectionViewItem在NSTextField后面
当您单击NSCollectionViewItem
时,该项目被选中。
当您单击NSTextField
时,它获得焦点,但在文本字段后面的NSCollectionViewItem
未被选中。
我想改变这最后的行为,所以文本字段获得焦点和视图项目也被选中。
这样做的最好方法是什么?
我在NSCollectionViewItem
的视图上有一个NSTextField
。NSCollectionViewItem在NSTextField后面
当您单击NSCollectionViewItem
时,该项目被选中。
当您单击NSTextField
时,它获得焦点,但在文本字段后面的NSCollectionViewItem
未被选中。
我想改变这最后的行为,所以文本字段获得焦点和视图项目也被选中。
这样做的最好方法是什么?
我相信你将不得不继承的NSTextField和覆盖鼠标按下传递事件到nextResponder(应设为您的收藏视图)
这给了我最多的方式。你需要重写mouseDown,并且我找不到一种对事件作出反应的方法。所以我选择使用命令键决定是否将事件传递给nextResponder或文本字段的原始mouseDown事件。如果我打电话都有奇怪的行为。 – 2012-02-25 21:20:40
我也有一个包含的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];
}
}
这回答了上述问题,但显然,更多的是需要一个完整的解决方案。
对不起,我现在不记得了,但是有一个特殊的设置让视图(包括TextField)对鼠标事件“透明”,并在处理它们时将它们传递给响应者链。只是不记得确切的设置。 – 2014-06-18 08:27:35