gpt4 book ai didi

objective-c - TextView 中选定字符串的行号

转载 作者:搜寻专家 更新时间:2023-10-30 20:09:14 24 4
gpt4 key购买 nike

我在 NSTextView 控件中放置了一些文本。好吧,我的文本字符串来自哪里并不重要。所以我不会将这个主题仅限于 OSX。无论如何,我可以找出所选字符串的当前位置,例如...

NSRange sel = [textView1 selectedRange]; // textView1 may be NSTextView or UITextView.
NSNumber *point = [NSNumber numberWithInteger:sel.location];

如何找出所选字符串属于哪一行?

NSArray *array = [[textView1 string] componentsSeparatedByString:@"\r\n"];

感谢您的帮助。

最佳答案

我认为下面的代码应该可以做到。 m 是所选字符串所属的行号。它基于数组。所以第一行是 0,而不是 1。stringContains 只是一个函数,用于查看字符串(在本例中为每一行)是否包含所选段落。我需要返回一个简单的数字,代码行太多了。我不知道这是否是一种更简单的方法。请注意,m 的数据类型设置为“unsigned”,k 设置为“unsigned long”。 k 是所有字符的个数。这个数字和 stringContains 确保 m 是所选段落所属的行。如果总行数很大,比如几千行,您可能需要自动释放变量。这是针对 OSX 的。

- (void)findLineNumber {
NSRange sel = [textView1 selectedRange];
NSNumber *point = [NSNumber numberWithInteger:sel.location];
NSString *selectedText = [[textView1 string] substringWithRange:[textView1 selectedRange]]; // [textView1 string] into textView1.text for iOS
NSArray *array = [[textView1 string] componentsSeparatedByString:@"\n"]; // [textView1 string] into textView1.text for iOS

unsigned long k = 0;
unsigned m;
for (unsigned i2 = 0; i2 < array.count; i2++) {
NSString *line = [array objectAtIndex:i2];
if (point.integerValue >= k && [self stringContains:line:selectedText]) {
m = i2;
}
k += line.length;
}

NSLog(%i,m); // zero-based
}

- (BOOL)stringContains:(NSString *)source :(NSString *)find {
// case-sensitive
NSRange myRange;
myRange = [source rangeOfString:find];
if ([source isEqualToString:find]) {
return true;
} else {
if (source.length > find.length) {
if (myRange.location == NSNotFound) {
return false;
}
else {
return true;
}
} else {
return false;
}
}
}

关于objective-c - TextView 中选定字符串的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21526885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com