objective-c – 未调用NSTextField自动完成委托方法

objective-c – 未调用NSTextField自动完成委托方法,第1张

概述我为NSTextField实现了以下委托方法来添加自动完成支持: - (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange in 我为NSTextFIEld实现了以下委托方法来添加自动完成支持:

- (NSArray *)control:(NSControl *)control            textVIEw:(NSTextVIEw *)textVIEw         completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index

问题是这个方法永远不会被调用.我可以验证NSTextFIEld的委托是否设置正确,因为其他委托方法的功能正常.

解决方法 您需要在某个时刻在文本字段 field editor上调用 complete:.这就是触发完成菜单的原因,但它不会自动调用.如果你没有F5绑定任何东西,请尝试在你的字段中键入并点击它.完成应该触发; Option-Esc也可以工作.

如果你想要自动完成,需要一些工作.你可以从这样的事情开始:

- (voID)controlTextDIDChange:(NSNotification *)note {    if( amDoingautoComplete ){        return;    } else {        amDoingautoComplete = YES;        [[[note userInfo] objectForKey:@"NSFIEldEditor"] complete:nil];    }}

某种标志是必要的,因为触发完成会使NSControlTextDIDChangeNotification再次发布,这会导致调用它,触发完成,这会更改控制文本,其中……

显然,你需要在某些时候取消标志.这将取决于您希望如何处理用户与自动完成的交互 – 对于给定的开始字符串可能只有一个完成,或者用户是否需要继续键入以缩小可能性(在这种情况下您需要再次触发自动完成)?

一个简单的旗帜也许不会这样做;似乎虽然重新发布了通知,但字段编辑器的字符串不会改变 – 它只会响应直接键盘输入而改变.在我的自动完成实现中,我发现我必须保留“最后输入的字符串”的副本,并将其每次与字段编辑器的内容进行比较.

总结

以上是内存溢出为你收集整理的objective-c – 未调用NSTextField自动完成委托方法全部内容,希望文章能够帮你解决objective-c – 未调用NSTextField自动完成委托方法所遇到的程序开发问题。

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

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

原文地址:https://www.54852.com/web/1024185.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存