自动完成UITextField

我想自动从自定义值中完成文本字段

在这里研究了Google和SO UITextField Autocomplete – iPhone SDK

我试过这个:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([string isEqualToString:@"Fac"]) { _clientField.text = @"Factory"; } return YES; } 

问题是我没有得到预测值inputFactory ,只是键入的值Fac

编辑

试图根据答案…

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([string isEqualToString:@"Fac"]) { _clientField.text = [_clientField.text stringByReplacingCharactersInRange:range withString:@"Factory"]; } return NO; } 

还是一样

我检查了您的示例代码,并没有设置文本字段的代表。

你可以在你的视图控制器中使用

 _clientField.delegate = self; 

此外,您需要使用稍微不同的方法来获取用户看到的文本。 像这样的东西:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *currentString = [textField.text stringByReplacingCharactersInRange:range withString:string]; if ([currentString isEqualToString:@"Fac"]) { textField.text = @"Factory"; return NO; } return YES; } 

请注意,您可能需要对此进行微调,因为它也会在用户删除文本时自动完成。 但是这应该让你走上正轨。

听起来像HTAutocompleteTextField将完成这项工作:

https://github.com/hoteltonight/HTAutocompleteTextField

你基本上只需要给它一个值作为自动完成数据源的数组,它会使文本字段中的build议作为用户types。

你应该尝试NSLog string它总是返回用户input的最后一个字符(除非你复制/粘贴一个string:在这种情况下,你的代码工作)。

其实,做你正在做的事情并不像看起来那么简单。 在这里,我想出了:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSLog(@"string: %@", string); NSString *currentText = textField.text; NSString *nextText = [currentText stringByAppendingString:string]; if ([nextText isEqualToString:@"Fac"]) { textField.text = @"Factory"; return NO; } return YES; } 

如果你不自己构buildnextText,那么自动完成将被延迟。 如果您只检查textField.text的值,并且键入“Fac”,则在下一个字符input时将会发生完成。
当你自动填充字段时,你必须返回NO,所以string不会被添加到文本字段的末尾(F – > Fa – > Factoryc,你不需要)。 所以你说textField不应该改变范围内的字符…而你自己改变textField的值。

希望这会帮助你理解这个UITextFieldDelegate方法中发生了什么。

你也可以看看这个控件( NHAutoCompleteTextField )。 在给定链接的示例源代码中,您将看到search列表filter作为用户types。

NHAutoCompleteTextField易于集成:

 #import "NHMainHeader.h" autoCompleteTextField = [[NHAutoCompleteTextField alloc] initWithFrame:CGRectMake(x, y, width, 18)]; // 18 - example height [autoCompleteTextField setDropDownDirection:NHDropDownDirectionDown]; [autoCompleteTextField setDataSourceDelegate:self]; [autoCompleteTextField setDataFilterDelegate:self]; 

并根据您的需要灵活定制。 例如,根据您的需要在这里创build单元格:

 - (UITableViewCell *)autoCompleteTextBox:(NHAutoCompleteTextField *)autoCompleteTextBox cellForRowAtIndexPath:(NSIndexPath *)indexPath { } 

对于给定的下拉方向可以调整。

 typedef enum { NHDropDownDirectionUp, NHDropDownDirectionDown } NHDropDownDirection; 

这个控件还提供了一些很好的扩展function,这将有助于处理其他用户界面。

 #import "UIView+NHExtension.h" #import "UILabel+Boldify.h"