Другой способ, который я понял, заключается в следующем.
В функции - (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;
}
Только не забудьте очистить ваши переменные, когда пользователь забивает середину хеш-тега.