【问题标题】:UITextField Autocomplete?UITextField 自动完成?
【发布时间】:2011-03-13 00:25:27
【问题描述】:

我想弄清楚是否有办法在 UITextField 中为特定值实现自动完成功能。

我知道UITextField 可以使用 iPhone 字典执行此操作(很像在 safari 中搜索 google 等),但我希望能够以编程方式将其正确设置为我指定的某些值。

如何做到这一点?

【问题讨论】:

标签: ios objective-c autocomplete uitextfield


【解决方案1】:

布雷特,

在最近的一个相当大的项目中,我做了与此非常相似的事情。我们有一个不断变化的自动完成术语列表,并围绕它们构建了一个自动完成。

首先,您需要制作某种类型的自动完成控制器。它应该接受一个字符串并返回该字符串所有可能的自动完成术语。

-(NSArray *)completionsForString:(NSString *)myString;

然后,查看 UIMenuController 类。它是在许多应用程序中显示剪切/复制/粘贴选项的类。您可以获取它的共享实例,自己填充菜单项,并将其显示在文本字段上方。然后,用户可以简单地点击他们想要的术语。

最终,该解决方案非常适合我们的需求。我希望它对你有用。

【讨论】:

    【解决方案2】:

    查看 Ray Wenderlich 的 this tutorial,它演示了一种实现自定义自动完成的方法

    【讨论】:

    • 请注意,不鼓励仅链接的答案,因此答案应该是搜索解决方案的终点(相对于另一个参考中途停留,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
    • 本教程有效。只需观看您的 UITextViewUITextField。一个警告是,由于某种原因,我的自动完成选项之一被某种方式掩盖了。如果你弄明白了,请告诉我。
    【解决方案3】:

    或者,您可以使用这个 UITextField 子类(受 DOAutocompleteTextField 启发):

    https://github.com/hoteltonight/HTAutocompleteTextField

    它还有更多功能并且正在积极开发中。该示例向您展示了如何使用数组作为自动建议文本的数据源。它采用与 DOAutocompleteTextField 相同的方法,因为它在用户键入时在文本字段中显示建议的完成文本“幻影”。

    【讨论】:

      【解决方案4】:

      你看过UISearchDisplayController吗?有一些threads here on Stack Overflow,包括核心数据参考(如果您正在使用它)。还有一些alternative methods,其他地方。

      【讨论】:

        【解决方案5】:

        在前面提到的 Ray Wenderlich 教程的帮助下,我刚刚实现了一个版本来过滤现有 UITableView 中的名称。

        我将文本字段的委托设置为我的视图控制器,我的视图控制器设置为UITextFieldDelegate,并实现了这两种方法:

        - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
        {
            NSString *substring = [NSString stringWithString:textField.text];
            substring = [substring stringByReplacingCharactersInRange:range withString:string];
            [self searchAutocompleteEntriesWithSubstring:substring];
            return YES;
        }
        
        - (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring
        {   
            NSMutableArray *autoCompleteArray = [[NSMutableArray alloc]init];
            [self retrieveData];
        
            for(NSString *curString in _staffTableArray)
            {
                NSString *lowerCaseCur = [curString lowercaseString];
                NSRange substringRange = [lowerCaseCur rangeOfString:substring];
                if (substringRange.location == 0)
                {
                    [autoCompleteArray addObject:curString];
                }
            }
            if (![substring isEqualToString:@""])
            {
                 _staffTableArray = [NSMutableArray arrayWithArray:autoCompleteArray];
            }  
            [_staffListTableView reloadData];
        }
        

        【讨论】:

          【解决方案6】:

          使用这个委托方法。您可以替换您指定的值。

          - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text
                if ([string isEqualToString:@"StackO"]) {
                     textField.text=@"StackOverflow";
                }
              return YES;
          }
          

          【讨论】:

            【解决方案7】:

            刚面对这个线程,因为我需要类似的东西。用 UITextfieldDelegate 的方法实现你自己的搜索怎么样:

            - (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
            

            您可能知道,每次输入 UITextfield 都会调用此方法。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-11-24
              • 1970-01-01
              • 2016-04-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多