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
Ios 在数组中查找文本并返回索引号_Ios_Objective C_Nsarray_Uitextview - Fatal编程技术网

Ios 在数组中查找文本并返回索引号

Ios 在数组中查找文本并返回索引号,ios,objective-c,nsarray,uitextview,Ios,Objective C,Nsarray,Uitextview,我正在文本视图中显示由\n或换行符分隔的字符串数组。感谢\n,如果文本视图中有空间,则每个字符串都有自己的行。但是,如果textview的宽度小于字符串的宽度,则textview会自动将该行换行到下一行,使该字符串实际占用两行。到目前为止,这没有什么问题 但是,如果有人碰它,我想抓住它。如果绳子与一条线吻合,它就可以正常工作。但是,如果textview将字符串分成两行,如果用户触摸到顶行,我需要附加下面的行以获得整个字符串。或者,如果用户触及底线,我需要获取并添加上一条,以获得整个字符串 有人能

我正在文本视图中显示由\n或换行符分隔的字符串数组。感谢\n,如果文本视图中有空间,则每个字符串都有自己的行。但是,如果textview的宽度小于字符串的宽度,则textview会自动将该行换行到下一行,使该字符串实际占用两行。到目前为止,这没有什么问题

但是,如果有人碰它,我想抓住它。如果绳子与一条线吻合,它就可以正常工作。但是,如果textview将字符串分成两行,如果用户触摸到顶行,我需要附加下面的行以获得整个字符串。或者,如果用户触及底线,我需要获取并添加上一条,以获得整个字符串

有人能建议正确的方法吗

下面是我的代码,它获取了用户所接触的行,但是,它仅获取了所接触的行,并且在尝试计算数组中字符串的索引时失败

感谢您的建议:

- (void) handleTap:(UITapGestureRecognizer *)recognizer{
    UITextView *textView =  (UITextView *)recognizer.view;
    CGPoint location = [recognizer locationInView:textView];
    CGPoint position = CGPointMake(location.x, location.y);
     UITextPosition *tapPosition = [textView closestPositionToPoint:position];

    UITextRange *textRange = [textView.tokenizer rangeEnclosingPosition:tapPosition withGranularity:UITextGranularityLine inDirection:UITextLayoutDirectionRight];
//In following line, I am not getting the full text in the string, only the text of that line.  I need to get the whole string.
    NSString *tappedLine = [textView textInRange:textRange];
    NSArray* myArray  = [self.listSub.text componentsSeparatedByString:@"\n"];     
      NSInteger indexOfTheObject = [myArray indexOfObject: tappedLine];
//If the tapped line is not the same thing as the string, the above index becomes huge number like 94959494994949494 ie an error, not the index I want.
    }

您可能需要使用UITableView进行研究


您可以为数组中的每个条目创建一个带有文本视图的单元格,当用户与任何单元格交互时,您将收到委托调用。这确实是可能的

首先,您需要将粒度更改为UITextGranularityParagraph:

这将返回用户点击的整行文字,无论他们点击在哪里

但是,此文本将包含标记段落结尾的尾随字符。在将文本与数组进行比较之前,需要删除此项。将上面代码的最后一行替换为以下两行:

NSString *trimmedLine = [tappedLine stringByTrimmingCharactersInSet:
                              [NSCharacterSet newlineCharacterSet]];
NSInteger indexOfTheObject = [myArray indexOfObject: trimmedLine];

谢谢我希望在没有tableview的情况下实现这一点。你有行文本意味着数组的对象和全文吗?哈利路亚!谢谢大家!!
NSString *trimmedLine = [tappedLine stringByTrimmingCharactersInSet:
                              [NSCharacterSet newlineCharacterSet]];
NSInteger indexOfTheObject = [myArray indexOfObject: trimmedLine];