Mat*_*off 5 macos cocoa objective-c nstokenfield
我的应用程序中有一个NSTokenField.当我点击完成列表中的一个建议时,我希望列表消失并完成令牌(如Mail)但是,这似乎没有发生 - 点击建议只是附加剩余的字符串和列表不会消失.
如果按下Return键,完成列表就会消失,但是我希望通过点击建议来解除它.我怎样才能做到这一点?
我找到了解决这个问题的方法,虽然还不完美,但我希望我很快就能解决我遇到的最后一个问题。
我正在使用 rubymotion,即使我可以翻译Objective-C
成Ruby
,我也无法做相反的事情,所以我的答案将是Ruby
。请随意编辑我的答案以添加相应的Objective-C
代码。
在 my 的委托中NSTokenField
,我使用了controlTextDidChange方法NSControl
,只要我在令牌字段中写入字符,就会调用该方法。在这个方法中,我检查是否有一个NSLeftMouseUp
事件被触发,如果是这样,我模拟一次点击Return
(从另一个SO问题中了解到)。就是这样。
这是我的Ruby
代码:
def controlTextDidChange(aNotification)
application = NSApplication.sharedApplication
event = application.currentEvent
if event.type == NSLeftMouseUp
e1 = CGEventCreateKeyboardEvent(nil, 0x24, true)
CGEventPost(KCGSessionEventTap, e1)
end
end
Run Code Online (Sandbox Code Playgroud)
但就像我告诉你的那样,它还不完美:我的问题是,如果我有一个包含 3 个项目的完成列表,则默认情况下会选择其中一个,比如说第一个。在这种情况下,如果我单击第二个或第三个项目,我的解决方案将按预期工作,但我必须双击第一个项目才能使其工作。
但这仍然是一个好的开始,我希望它能有所帮助!
编辑
为了解决我遇到的最后一个问题,我关闭了自动完成功能并仅显示建议框。为此,我将这一行添加到该tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:
方法中:
selectedIndex[0] = -1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
514 次 |
最近记录: |