【发布时间】:2011-03-13 00:25:27
【问题描述】:
我想弄清楚是否有办法在 UITextField 中为特定值实现自动完成功能。
我知道UITextField 可以使用 iPhone 字典执行此操作(很像在 safari 中搜索 google 等),但我希望能够以编程方式将其正确设置为我指定的某些值。
如何做到这一点?
【问题讨论】:
标签: ios objective-c autocomplete uitextfield
我想弄清楚是否有办法在 UITextField 中为特定值实现自动完成功能。
我知道UITextField 可以使用 iPhone 字典执行此操作(很像在 safari 中搜索 google 等),但我希望能够以编程方式将其正确设置为我指定的某些值。
如何做到这一点?
【问题讨论】:
标签: ios objective-c autocomplete uitextfield
布雷特,
在最近的一个相当大的项目中,我做了与此非常相似的事情。我们有一个不断变化的自动完成术语列表,并围绕它们构建了一个自动完成。
首先,您需要制作某种类型的自动完成控制器。它应该接受一个字符串并返回该字符串所有可能的自动完成术语。
-(NSArray *)completionsForString:(NSString *)myString;
然后,查看 UIMenuController 类。它是在许多应用程序中显示剪切/复制/粘贴选项的类。您可以获取它的共享实例,自己填充菜单项,并将其显示在文本字段上方。然后,用户可以简单地点击他们想要的术语。
最终,该解决方案非常适合我们的需求。我希望它对你有用。
【讨论】:
查看 Ray Wenderlich 的 this tutorial,它演示了一种实现自定义自动完成的方法
【讨论】:
UITextView 与 UITextField。一个警告是,由于某种原因,我的自动完成选项之一被某种方式掩盖了。如果你弄明白了,请告诉我。
或者,您可以使用这个 UITextField 子类(受 DOAutocompleteTextField 启发):
https://github.com/hoteltonight/HTAutocompleteTextField
它还有更多功能并且正在积极开发中。该示例向您展示了如何使用数组作为自动建议文本的数据源。它采用与 DOAutocompleteTextField 相同的方法,因为它在用户键入时在文本字段中显示建议的完成文本“幻影”。
【讨论】:
你看过UISearchDisplayController吗?有一些threads here on Stack Overflow,包括核心数据参考(如果您正在使用它)。还有一些alternative methods,其他地方。
【讨论】:
在前面提到的 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];
}
【讨论】:
使用这个委托方法。您可以替换您指定的值。
- (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;
}
【讨论】:
刚面对这个线程,因为我需要类似的东西。用 UITextfieldDelegate 的方法实现你自己的搜索怎么样:
- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
您可能知道,每次输入 UITextfield 都会调用此方法。
【讨论】: