iOS中的Textview with Suggestions List

时间:2013-05-22 07:54:56

标签: iphone ios objective-c uitextfield uitextview

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

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

Aron,Maria,Alex,Cassie

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

感谢。

5 个答案:

答案 0 :(得分:2)

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

tokenField libraries

答案 1 :(得分: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

}

答案 2 :(得分:0)

我在移动应用中没有看到这样的内容。你可以寻找图书馆。但如果你想自己做,我会建议你使用隐形tableView。当用户开始输入名称时,你应该fetchData并在textView下的tableView中显示。这并不难。

答案 3 :(得分:0)

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

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

例如,附件视图可以被赋予对文本字段的引用并通过以下方式收听输入:

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

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

它可能会将这些建议显示为一行按钮(例如,甚至可以在侧滚动滚动视图中提供许多建议),如果有人推送,则通过用完成的字符串替换最后一个文本段来更新文本字段文本

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

答案 4 :(得分:-1)

如果你想要一些图书馆代码,那么你可以去做 https://github.com/hoteltonight/HTAutocompleteTextField会帮助你