Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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 在Swift中滚动到UITextView的特定部分_Ios_Swift_Scroll_Uitextview - Fatal编程技术网

Ios 在Swift中滚动到UITextView的特定部分

Ios 在Swift中滚动到UITextView的特定部分,ios,swift,scroll,uitextview,Ios,Swift,Scroll,Uitextview,在我正在创建的Swift应用程序中,用户可以在文本视图中键入一些文本,然后在其中搜索特定字符串,就像在页面(以及其他许多页面)中一样 我有他们正在搜索的字符的索引,作为一个整数(也就是说,他们在他们输入的大量文本块中是“hello”的第三个实例,我知道这是文本视图的第779个字母),我试图自动将文本视图滚动到他们打开的字符串,以便它弹出(就像在书页中一样) 我试图使用以下命令跳转到适用的字符串: self.textview.scrollRangeToVisible(NSMakeRange(ind

在我正在创建的Swift应用程序中,用户可以在文本视图中键入一些文本,然后在其中搜索特定字符串,就像在页面(以及其他许多页面)中一样

我有他们正在搜索的字符的
索引
,作为一个整数(也就是说,他们在他们输入的大量文本块中是“hello”的第三个实例,我知道这是文本视图的第779个字母),我试图自动将文本视图滚动到他们打开的字符串,以便它弹出(就像在书页中一样)

我试图使用以下命令跳转到适用的字符串:

self.textview.scrollRangeToVisible(NSMakeRange(index, 0))
但它从不跳到正确的位置(有时向下太远,有时向上太远),通常取决于屏幕大小,所以我知道
index
不属于这里


如何使文本视图滚动到某个字符,从而正确允许用户跳转到文本视图中的特定字符串?

您可以获取索引779之前的字符串,然后计算该字符串的高度,然后滚动到此点

let string = textView.text.substringWithRange(Range<String.Index>(start: textView.text.startIndex, end: textView.text.startIndex.advancedBy(779)))// your <779 string
let size = string.sizeWithAttributes([NSFontAttributeName:yourFont])
let point = CGPointMake(0, size.height)
scrollView.setContentOffset(point, animated:true)

let string=textView.text.substringWithRange(范围(开始:textView.text.startIndex,结束:textView.text.startIndex.advancedBy(779))//您的另一个答案似乎不再有效(2021年1月)。但现在有一个更简单的方法:

// Range specific to the question, any other works
let rangeStart = textView.text.startIndex
let rangeEnd = textView.text.index(rangeStart, offsetBy: 779)
let range = rangeStart..<rangeEnd

// Convert to NSRange
let nsrange = NSRange(range, in: textView.text)

// ... and scroll
textView.scrollRangeToVisible(nsrange)


//特定于问题的范围,任何其他作品
让rangeStart=textView.text.startIndex
让rangeEnd=textView.text.index(rangeStart,offsetBy:779)

让range=rangeStart..谢谢你的回答!一个问题:在第一行,我发现
无法使用类型为“(start:Index,end:String.CharacterView.Index)的参数列表调用类型为“range”的初始值设定项“
。我应该注意,我使用的是Swift 3。@约翰拉莫斯只要试一下文字,而不是范围,使用诸如textView.text.startIndex之类的东西。.Swift 3中没有
advancedBy
函数!!与您的代码配合完全有效。谢谢您的帮助!我不明白这怎么可能起作用,sizeWithAttributes正在返回字符串的大小,而不考虑它所打印的文本视图,这意味着高度将不考虑换行。因此,它如何可能返回一个高度,您可以使用该高度在文本视图中滚动到正确的位置,这可能是换行。