objective-c – 单击项目时关闭NSTokenField完成列表?

objective-c – 单击项目时关闭NSTokenField完成列表?,第1张

概述我的应用程序中有一个NSTokenField.当我点击完成列表中的一个建议时,我希望列表消失并完成令牌(如Mail)但是,这似乎没有发生 – 点击建议只是附加剩余的字符串和列表不会消失. 如果按下Return键,完成列表就会消失,但是我希望通过点击建议来解除它.我怎样才能做到这一点? 我找到了解决这个问题的方法,但这还不完美,但我希望我能尽快解决上一期的问题. 我正在使用rubymotion,即使 我的应用程序中有一个NSTokenFIEld.当我点击完成列表中的一个建议时,我希望列表消失并完成令牌(如Mail)但是,这似乎没有发生 – 点击建议只是附加剩余的字符串和列表不会消失.

如果按下Return键,完成列表就会消失,但是我希望通过点击建议来解除它.我怎样才能做到这一点?

解决方法 我找到了解决这个问题的方法,但这还不完美,但我希望我能尽快解决上一期的问题.

我正在使用rubymotion,即使我可以在Ruby中翻译Objective-C,我也无法做到相反,所以我的答案将在Ruby中.随意编辑我的答案,添加相应的Objective-C代码.

在我的NSTokenFIEld的委托中,我使用了NSControl的controlTextDidChange方法,只要我在令牌字段中写入一个字符,就会调用它.在这个方法中,我检查是否有一个触发的NSleftMouseUp事件,如果是这种情况,我模拟一个点击返回(从其他SO question学习).就是这样.

这是我的Ruby代码:

def controlTextDIDChange(aNotification)  application = NSApplication.sharedApplication  event = application.currentEvent  if event.type == NSleftMouseUp    e1 = CGEventCreateKeyboardEvent(nil,0x24,true)    CGEventPost(KCGSessionEventTap,e1)  endend

但就像我告诉你的那样,它还不完美:我的问题是,如果我有一个包含3个项目的完成列表,默认情况下会选择其中一个,让我们说第一个.在这种情况下,如果我单击第二个或第三个项目,我的解决方案将按预期工作,但我必须双击第一个项目才能使其工作.

但是,这仍然是一个良好的开端,我希望它会有所帮助!

编辑

为了解决我的最后一个问题,我关闭了自动完成功能,只显示了建议框.为此,我将此行添加到tokenFIEld:completionsForSubstring:indexOfToken:indexOfSelectedItem:method:

selectedindex[0] = -1
总结

以上是内存溢出为你收集整理的objective-c – 单击项目时关闭NSTokenField完成列表?全部内容,希望文章能够帮你解决objective-c – 单击项目时关闭NSTokenField完成列表?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1013501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存