2013-09-09 9 views
2

Я использую приведенный ниже код для обнаружения слов, используемых в UITextView. Это прекрасно работает, но я хочу обнаружить некоторые специальные символы, например, ?. ? не отображается как часть слова при использовании UITextGranularityWord, и я не могу заставить его отображаться при использовании UITextGranularityCharacter.Обнаружение символов, используемых в UITextView

Как я могу обнаружить краны на отдельных специальных символах, таких как ??

-(NSString*)getWordAtPosition:(CGPoint)pos inTextView:(UITextView*)_tv 
{ 
    //eliminate scroll offset 
    pos.y += _tv.contentOffset.y; 

    //get location in text from textposition at point 
    UITextPosition *tapPos = [_tv closestPositionToPoint:pos]; 

    //fetch the word at this position (or nil, if not available) 
    UITextRange * wr = [_tv.tokenizer rangeEnclosingPosition:tapPos withGranularity:UITextGranularityWord inDirection:UITextLayoutDirectionRight]; 

    if ([_tv textInRange:wr].length == 0) {//i.e. it's not a word 

     NSLog(@"is 0 length, check for characters (e.g. ?)"); 

     UITextRange *ch = [_tv.tokenizer rangeEnclosingPosition:tapPos withGranularity:UITextGranularityCharacter inDirection:UITextLayoutDirectionRight]; 

     NSLog(@"ch range: %@ ch text: %@",ch, [_tv textInRange:ch]); // logs: ch range: (null) ch text: 

     if ([[_tv textInRange:ch] isEqualToString:@"?"]) { 
      return [_tv textInRange:ch]; 
     } 
    } 

    return [_tv textInRange:wr]; 
} 
+0

Вы можете попробовать это: http://stackoverflow.com/questions/5091851/how-to-detect-space -and-special-characters-like-etc-in-text-of-text – Nico

+0

Я не уверен, как это сработает - если моя функция для возврата десантированного символа не может вернуть '?', как можно Я использую 'NSCharacterSet'? Я не хочу проверять, существует ли '?' В строке, но только в том случае, если она существует в местоположении, которое пользователь удаляет. – glenstorey

+0

Хорошо, что я сожалею. Вы хотите получить персонажа, который используется в вашем текстовом элементе, не так ли? Я проверил ваш код, который работает для «?», Вы можете использовать тот же способ, чтобы протестировать весь специальный символ? – Nico

ответ

3

Этот код работает для меня на IOS 6:

- (void)tappedTextView:(UITapGestureRecognizer *)recognizer { 
     UITextView *textView = (UITextView *)recognizer.view; 
     CGPoint location = [recognizer locationInView:textView]; 
     UITextPosition *tapPosition = [textView closestPositionToPoint:location]; 
     UITextRange *textRange = [textView.tokenizer rangeEnclosingPosition:tapPosition withGranularity:UITextGranularityCharacter inDirection:UITextLayoutDirectionRight];   
     NSString *character = [textView textInRange:textRange]; 
     NSLog(@"%@", character); 
    } 
Смежные вопросы