带有iOS中build议列表的Textview

我试图实现一个textView中,当用户开始键入(让我们说名字)它会显示的build议,当他们点击它们被添加到textView比用户按逗号和再次相同的function另一个名字… 。

最后,textView中的文本应该看起来像这样…

阿隆,玛丽亚,亚历克斯,卡西

任何人都可以build议我怎样才能做到这一点? (它有点类似于发布这个问题时添加“标签”!!!)

谢谢。

你可以使用NSTokenFieldreplace,这里有一些库:

tokenField库

以下链接可能会帮助您: http : //www.raywenderlich.com/336/how-to-auto-complete-with-custom-values

遵循相同的stream程。 要在逗号之后获得自动填充build议,请修改委托方法,如下所示。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { autocompleteTableView.hidden = NO; NSString *names = [NSString stringWithString:textField.text]; NSArray* arr = [names componentsSeparatedByString:@","]; NSString *subString = [arr lastObject]; substring = [substring stringByReplacingCharactersInRange:range withString:string]; [self searchAutocompleteEntriesWithSubstring:substring]; return YES; } 

提供一个名为“allNames”的NSMutableArray,其中包含您想要在build议列表中显示的所有名称,并将其用作以下内容:

 - (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring { [autocompleteUrls removeAllObjects]; for(NSString *curString in allNames) { NSRange substringRange = [curString rangeOfString:substring]; if (substringRange.location == 0) { [autocompleteUrls addObject:curString]; } } [autocompleteTableView reloadData]; } 

当用户单击build议时,通过附加先前input的名称显示名称。

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // set the textField.text by appending this name to already entered names } 

我在移动应用程序中没有看到类似的东西。 你可以找库。 但如果你想自己做,我会build议你使用不可见的tableView。 当用户开始input名称时,你应该fetchData并显示在textView下的tableView。 这并不难。

我能想到的一个相对简单的方法来实现这个function,就是将一个input附件视图添加到键盘上,这将提供build议。

您不必篡改TextField本身,也不需要将build议合并到其他应用程序布局中。

例如,附件视图可以被给予对文本字段的引用并且通过以下来听取input:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged) name:UITextFieldTextDidChangeNotification object:textFieldWithSuggestions]; 

它将采用一种方法 – (void)textChanged; 在其中您将有机会将现有文本拆分为组件,使用逗号或任何符号作为分隔符,然后使用最后一个文本片段来执行可能的完成search。

它可能会提供这些build议作为一个button行例如(甚至在一个横向滚动scrollview允许许多build议),如果被推动,更新文本字段的文本通过replace最后的文本段与完成的string。

要跟踪哪个button代表哪个build议,只需根据您的search结果的索引给他们标签。 这样,您也只需要一个方法作为button的目标。

如果你想要一些库代码,那么你可以去这个https://github.com/hoteltonight/HTAutocompleteTextField这将帮助你