これを行うために私が考え出した別の方法は次のとおりです。
この- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
関数では、入力中の#のリスナーを配置し、ユーザーがスペースを入力してリセットするまで、ハッシュに続く文字の記録を開始します。
if ([text isEqualToString:@"#"]) {
recordingHashTag = YES;
startParse = range.location;
}else if ([text isEqualToString:@" "]) {
currentHashTag = nil;
recordingHashTag = NO;
theTable.hidden = YES;
}
if (recordingHashTag == YES) {
NSString *value;
if (startParse > [textView.text length] - startParse) {
value = [textView.text substringWithRange:NSMakeRange(startParse, [textView.text length] - startParse)];
[self filterHashTagTableWithHash:value];
}
}
BOOL recordingHashTag
がに設定されている場合、ハッシュタグテキストを含むものを、事前に入力されたハッシュタグの配列を検索する関数YES
に渡します。substring
一致するものがある場合は、そのエントリをハッシュタグのフィルタリングされた配列に追加します。この配列を使用しtableview
て、オンザフライでデータを入力します。
-(void)filterHashTagTableWithHash:(NSString *)hash{
[self.filterHashTagArray removeAllObjects];
for (NSString *hashTag in self.hashTagArray ){
NSRange result = [hashTag rangeOfString:hash options:NSCaseInsensitiveSearch];
if (result.location != NSNotFound) {
[filterHashTagArray addObject:hashTag];
}
}
if (filterHashTagArray.count) {
theTable.hidden = NO;
}else{
theTable.hidden = YES;
}
[self.theTable reloadData];
}
最後のステップは、ユーザーがテーブルのエントリをクリックしたときにハッシュタグを挿入することです。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = (UITableViewCell*)[self tableView:theTable cellForRowAtIndexPath:indexPath];
NSString *newString = [textViewComment.text stringByReplacingCharactersInRange:NSMakeRange(startParse, [textViewComment.text length] - startParse) withString:cell.textLabel.text];
textViewComment.text = newString;
}
ユーザーがハッシュタグの途中でバックスペースを設定するときは、変数をクリアすることを忘れないでください。