2011-03-01 160 views
3

我有一个子类NSView,我想包含一个类似于Spotlight的可编辑NSTextField。NSMenuItem的自定义视图中的可编辑NSTextField

我很难让文本字段选择并突出显示。如果我在文本字段的编辑区域上快速点击,我实际上可以输入文本,但显示为灰色,好像我正在将文本添加到不是最重要的应用程序字段。

我试图使用viewDidMoveToWindow来获得视图窗口的焦点,但显然NSMenuItem的窗口是碳窗口,不能很好地处理键。

长话短说,成功完成这项工作的好方法是什么?我知道Spotlight是一个无边框窗口,但这不适合我的目的。

任何和所有的建议将是非常有益的。

回答

1

经过大量的研究,有两件事是共识:

(1)如果你发现自己寻找各种方法来继承内置特殊的UI元素的机会是你做错事情,或者至少,有一个更好的方式来做你想做的事情。

(2)遵循接口指南的原因是未来更加兼容。不能保证子分类的UI元素将与未来版本的操作系统兼容。

黄铜Tacks - 通常不建议子类化UI元素。

+2

那么你是如何解决这个问题的?你显然不是在做苹果不建议的事 - 你只是试图复制Spotlight的工作方式,因为我现在明白了事情。 NSView是一个非常通用的“UI类”,在我看来它意味着被分类。如果你想创建一个脉动的状态栏项目,或者类似Apple对机场状态栏项目所做的那样,该怎么办?你的声明UI类不应该被分类太广泛,并且不合理。问题是,你会如何完成你想要的功能,你是怎么做到的? –

+0

你在说什么?子分类的UI元素与未来版本的操作系统不兼容?这是我听过的最奇怪的事情。操作系统中的每一个控件都是一个子类化的UI元素!添加可扩展的NSView类的全部理由是拥有自己的自定义视图。我同意Dev的观点,你没有做Apple推荐的东西。事实上,Apple强烈建议您尽可能创建自定义视图。 – strange

0

您可能想查看Matt Gemmell的MAAttachedWindow。

http://mattgemmell.com/2007/10/03/maattachedwindow-nswindow-subclass

+1

是的,我是Gemmell的源代码和例子的长期用户。巨大的资源。然而,正如我上面所说的,我并不是真正对无边界窗口感兴趣 - 我试图避免额外的窗口。如果必须的话,我会在无边界NSWindow中效仿NSMenu,但这是非常不可取的;它非常冒险,而且没有任何未来发展的证据。 –

+0

与NSView有关的一切都是未来的证明。我认为你要么没有清楚地描述问题,要么没有更清楚地描述你想要做什么。无论哪种方式,请详细说明你想要做什么,因为你所说的是100%的未来证明。这是自定义控件背后的全部想法,除非您依赖私有API。 – strange

相关问题