7

我正在尝试实现一个 textView ,当用户开始输入(比如说名字)时,它会显示建议,当他们点击它们时,它会被添加到 textView 中,而不是用户按下逗号并再次为另一个名字提供相同的功能...... .

最后,textView 中的文本应如下所示...

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

任何人都可以建议我如何实现这一目标?(这有点类似于在发布此问题时添加“标签”!!!)

谢谢。

4

5 回答 5

2

您可以使用 NSTokenField 替换,这里有一些库:

令牌字段库

于 2013-05-22T10:23:29.177 回答
1

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

遵循相同的流程。要在逗号后获取自动完成建议,请修改委托方法,如下所示。

- (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,其中包含您要在建议列表中显示的所有名称,并将其用作以下内容:

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

当用户单击建议时,通过附加先前输入的名称来显示名称。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

  // set the textField.text by appending this name to already entered names

}
于 2013-05-22T10:41:21.487 回答
0

我能想到的实现此功能的一种相对简单的方法是向您的键盘添加一个输入附件视图,该视图将提供建议。

您不必篡改 TextField 本身,也不必将建议合并到应用程序布局的其余部分中。

例如,可以为附件视图提供对文本字段的引用并通过以下方式监听输入:

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

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

例如,它可以将这些建议显示为一排按钮(甚至可能在横向滚动滚动视图中以允许许多建议),如果一个被推送,通过用完整的字符串替换最后一个文本段来更新文本字段文本。

要跟踪哪个按钮代表哪个建议,只需根据搜索结果的索引给它们标签。这样,您也只需要一种方法作为按钮的目标。

于 2013-05-22T08:13:37.453 回答
0

我在移动应用程序中没有看到类似的东西。你可以找图书馆。但如果你想自己制作,我建议你使用隐形 tableView。当用户开始输入名称时,您应该获取数据并显示在 textView 下的 tableView 中。这并不难。

于 2013-05-22T08:01:41.190 回答
-1

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

于 2013-05-22T08:37:50.270 回答