objective-c – NSTextField自动完成

objective-c – NSTextField自动完成,第1张

概述有没有人知道任何可以实现NSTextField自动完成的类或库? 我试图让标准的自动完成工作,但它是作为一个同步api.我通过互联网上的api电话获得自动完成的话. 到目前为止我做了什么: - (void)controlTextDidChange:(NSNotification *)obj{ if([obj object] == self.searchField) { 有没有人知道任何可以实现NSTextFIEld自动完成的类或库?

我试图让标准的自动完成工作,但它是作为一个同步API.我通过互联网上的API电话获得自动完成的话.

到目前为止我做了什么:

- (voID)controlTextDIDChange:(NSNotification *)obj{    if([obj object] == self.searchFIEld)    {        [self.spinner startAnimation:nil];        [self.wordcompletionStore completeString:self.searchFIEld.stringValue];        if(self.doingautocomplete)            return;        else        {            self.doingautocomplete = YES;            [[[obj userInfo] objectForKey:@"NSFIEldEditor"] complete:nil];        }    }}

当我的商店完成后,我有一个被调用的委托:

- (voID) completionStore:(WordcompletionStore *)store dIDFinishWithWords:(NSArray *)arrayOfWords{    [self.spinner stopAnimation:nil];    self.completions = arrayOfWords;    self.doingautocomplete = NO;}

将完成列表返回到nstextfIEld的代码是:

- (NSArray *)control:(NSControl *)control textVIEw:(NSTextVIEw *)textVIEw completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index{    *index = -1;    return self.completions;}

我的问题是,这将始终是1个请求,完成列表仅显示用户输入的每个第2个字符.

我试图搜索谷歌和SO像疯子一样,但我似乎无法找到任何解决方案..

任何帮助深表感谢.

解决方法 不要让布尔属性为doneautocomplete,而是将属性作为发出请求的控件.我们称之为autoCompleteRequestor:

@property (strong) NSControl* autoCompleteRequestor;

因此,您将当前属性的设置自动完成设置为YES,而是存储对控件的引用.

- (voID)controlTextDIDChange:(NSNotification *)obj{    if([obj object] == self.searchFIEld)    {        [self.spinner startAnimation:nil];        [self.wordcompletionStore completeString:self.searchFIEld.stringValue];        if(self.autoCompleteRequestor)            return;        else        {            self.autoCompleteRequestor = [[obj userInfo] objectForKey:@"NSFIEldEditor"];        }    }}

现在,当您的Web请求完成后,您可以在存储的对象上调用complete :.

- (voID) completionStore:(WordcompletionStore *)store dIDFinishWithWords:(NSArray *)arrayOfWords{    [self.spinner stopAnimation:nil];    self.completions = arrayOfWords;    if (self.autoCompleteRequestor)    {       [self.autoCompleteRequestor complete:nil];       self.autoCompleteRequestor = nil;    }}
总结

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

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存