我想弄清楚是否有办法在UITextField
中为特定值实现自动完成功能。
我知道UITextField
可以使用iPhone词典执行此操作(非常类似于在Safari中搜索google等),但我希望能够以编程方式将其更正为我指定的某些值。
怎么做?
答案 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的输入都会调用此方法。