UITextField自动完成?

时间:2010-07-07 19:58:25

标签: ios objective-c autocomplete uitextfield

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

我知道UITextField可以使用iPhone词典执行此操作(非常类似于在Safari中搜索google等),但我希望能够以编程方式将其更正为我指定的某些值。

怎么做?

7 个答案:

答案 0 :(得分:12)

布雷特,

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

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

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

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

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

答案 1 :(得分:7)

查看Ray Wenderlich的this tutorial,其中演示了实现自定义自动填充的一种方法

答案 2 :(得分:6)

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

https://github.com/hoteltonight/HTAutocompleteTextField

它还有一些功能,并且正在积极开发中。该示例显示如何使用数组作为autosuggest文本的数据源。它采用与DOAutocompleteTextField相同的方法,因为它在用户输入时在文本字段中显示建议的完成文本“ghosted”。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

在前面提到的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];
}

答案 5 :(得分:1)

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

- (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;
}

答案 6 :(得分:1)

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

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

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

相关问题