Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用UITextPosition,从textInRange获取上一个字符_Ios_Objective C_Nsstring_Uitextview - Fatal编程技术网

Ios 使用UITextPosition,从textInRange获取上一个字符

Ios 使用UITextPosition,从textInRange获取上一个字符,ios,objective-c,nsstring,uitextview,Ios,Objective C,Nsstring,Uitextview,我一直在到处寻找,不知道该怎么做。假设我有这样一个字符串: NSString *string = @"&foo !foo"; 我想做的是区分文本视图中的两个foo(听起来很有趣,哈哈)。当我点击一个按钮时,我想知道哪个(或!)在它前面。我是这样理解这个词的: UITapGestureRecognizer *recognizer = (UITapGestureRecognizer *)sender; UITextView *TV = (UITextView*)recognizer.vie

我一直在到处寻找,不知道该怎么做。假设我有这样一个字符串:

NSString *string = @"&foo !foo";
我想做的是区分文本视图中的两个foo(听起来很有趣,哈哈)。当我点击一个按钮时,我想知道哪个(或!)在它前面。我是这样理解这个词的:

UITapGestureRecognizer *recognizer = (UITapGestureRecognizer *)sender;
UITextView *TV = (UITextView*)recognizer.view;
CGPoint location = [recognizer locationInView:TV];
location.y += TV.contentOffset.y;
UITextPosition *tapPosition = [TV closestPositionToPoint:CGPointMake(location.x, location.y)];
UITextRange *textRange = [TV.tokenizer rangeEnclosingPosition:tapPosition 
    withGranularity:UITextGranularityWord inDirection:UITextLayoutDirectionRight];
NSString *tappedWord = [TV textInRange:textRange];
我不知道如何获得上一个角色
TV.tokenizer
UITextGranularityCharacter
仅获取最接近的字母,而不是符号。有解决方案吗?

检查:将
uitexlange
转换为
NSRange
(我将调用
selectedRange

根据前面对链接问题的回答,您需要在代码末尾添加以下内容:

UITextPosition *beginning = TV.beginningOfDocument;
UITextPosition *selectionStart = textRange.start;
UITextPosition *selectionEnd = textRange.end;
NSInteger location = [TV offsetFromPosition:beginning toPosition:selectionStart];
NSInteger length = [TV offsetFromPosition:selectionStart toPosition:selectionEnd];
NSRange selectedRange = NSMakeRange(location,lenght);
NSRange range = NSMakeRange(selectedRange.location-1,1) //Maybe need to check if selectedRange.location>0
NSString *yourCharString = [[TV text] substringWithRange:range];

谢谢你的回复。我以前看过那篇文章。在创建新的NSRange之前,我必须将UITextRange转换为NSRange?是的,您必须将
UITextRange
(我更正了“NSTextRange”)转换为
NSRange
。好的,谢谢。尽管我仍然不知道怎么做。我有点击的位置,我还需要将其分解为UIExtPosition selectionStart和selectionEnd吗?我编辑了答案。你只需要在你的代码末尾加上我的代码就行了。我只需要将前面的答案代码粘贴一个重命名几个变量,但只要您理解并且它可以工作。