1

我正在尝试制作与 Twitter 在撰写推文时的工作方式相同的东西。

我的应用程序使用与 @username 相同的语法来发送消息。在我的撰写视图中,我有一个 UITextView/UITextField,用户在其中键入一条消息,我想检测用户何时键入 @,然后将 @ 后面的字符串与我为了自动完成而拥有的用户名数组进行比较.

我一直在关注这个优秀的教程: http ://www.raywenderlich.com/336/auto-complete-tutorial-for-ios-how-to-auto-complete-with-custom-values

这两种方法是我应该执行检测的地方:

- (BOOL)textField:(UITextField *)textField 
    shouldChangeCharactersInRange:(NSRange)range 
    replacementString:(NSString *)string {
  autocompleteTableView.hidden = NO;

  NSString *substring = [NSString stringWithString:textField.text];
  substring = [substring 
    stringByReplacingCharactersInRange:range withString:string];
  [self searchAutocompleteEntriesWithSubstring:substring];
  return YES;
}


- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring {

  // Put anything that starts with this substring into the autocompleteUrls array
  // The items in this array is what will show up in the table view
  [autocompleteUrls removeAllObjects];
  for(NSString *curString in pastUrls) {
    NSRange substringRange = [curString rangeOfString:substring];
    if (substringRange.location == 0) {
      [autocompleteUrls addObject:curString];  
    }
  }
  [autocompleteTableView reloadData];
}

我假设应该在这里检测到@,但我不确定如何这样做,然后只比较紧跟在符号后面的字符(并在遇到空格时停止比较)。

标准的 iOS twitter 应用程序是我正在寻找的一个主要示例。任何帮助都会很棒,谢谢!

4

1 回答 1

0

使用NSScanner. 在您的searchAutocompleteEntriesWithSubstring方法中,创建一个扫描仪substring并循环运行,最初搜索@,然后一旦找到它就会搜索空间。然后您可以使用扫描的字符串进行自动完成。

根据您在找到匹配项时对字符串所做的操作,决定了您的搜索算法是如何工作的。您可能希望找到最后一个的范围@并将substring扫描仪位置设置为那里(以避免处理任何以前的用户名) - 但是,您没有关于刚刚更改的信息,因此用户返回并插入了用户名...

于 2013-08-03T16:34:24.967 回答