弹出窗口类似于Xcode的代码完成?

时间:2011-10-19 08:18:29

标签: objective-c macos cocoa

我想在Xcode 4中构建类似于代码完成功能的东西。(视觉样式和行为,而不是代码完成所需的数据结构类型工作)。

当用户输入时,弹出窗口会显示可以选择的其他单词选项。

行动中的功能:

Code-Completion window in action.

我不确定从哪里开始。我主要关注窗口的视觉外观以及如何用一组给定的单词填充列表。稍后我将进入窗口,按照屏幕周围的光标等等。

我主要是在寻找如何在“窗口”中显示这些数据的概述,以及如何定制事物的外观,使其看起来像一个很好的小信息弹出窗口,而不是一个完整的OS X窗口。

3 个答案:

答案 0 :(得分:3)

只需将子视图添加到当前视图中,该视图恰好是一个tableview 。以编程方式使其在事件(例如mouseDown)上可见,并根据您想要的位置调整它的位置。您需要实例化适当的委托/数据源方法,但它应该非常简单。 您还需要一个源代码,用于您要在自动填充中使用的字词,并将它们放在数组或其他内容中,以便您的tableview数据源通过

就像我说的那样,如果你习惯使用tableviews并在现有视图中添加视图,那就不是很难了。如果这还不够解释,请发表评论,我可以更多地充实这个评论。

答案 1 :(得分:0)

在视图中添加(完成)子视图,并将其visible属性设置为NO。创建一个单独的AutoComplete对象,该对象将子视图包含为属性,并使用潜在的完成填充它。您的控制器可以响应按键(键入键入的)事件,并将每个事件的最后一个字(从末尾到第一个前一个空白的子字符串)提供给AutoComplete。 AutoComplete中的基本逻辑可能是:

给出一个自动完成,其中包含已知单词列表“狗,意大利面,分钟,马,备用,速度” 当被要求完成一个片段“sp” 然后应该提供以下词语作为潜在的完成,“意大利面条,备用,速度”

这意味着你需要用一个单词列表来实例化它(这可以在你的控制器的init中完成),并创建一个方法“ - (NSArray *)completeFragment:(NSString *)fragment;”。您可以将其放入OCUnit测试用例并迭代自动完成的实现,直到您正确完成。然后,您将编写一个方法,该方法从AutoComplete中获取完成并在子视图中列出它们。更好的是,你可以在AutoComplete中创建currentWord和potentialCompletions属性,当你发送它时会更新它“newFragment:(NSString *)fragment;”消息。把它扔进OCUnit并解决它然后使用那个potentialCompletions属性来驱动子视图的更新(可能最好建模为自定义tableView)。

答案 2 :(得分:0)

此处的问题显示了如何跟踪文本插入符插入点的全局位置: How to get global screen coordinates of currently selected text via Accessibility APIs.

相关问题