我是斯威夫特的新手,所以请原谅我的无知。
我正在做一本有很多章节的书籍应用程序 我已经提供了添加和保存书签的功能。我在标签上显示这个书签字符串。点击此书签后,我可以转到包含此书签的章节 我使用了UITextView highlight all matches using swift中接受的答案中的一些代码作为参考。
我面临的问题是:
1.我无法将焦点转移到该章节上的书签字符串。
例如:我在第1章的末尾保存了一个书签。下次我点击书签时,我希望转到保存的书签位置,即本章末尾。到目前为止我所取得的成就是将书签定位的hghlight。在这种情况下,由于书签位于章节的末尾,我仍然需要向下滚动才能到达我的书签位置。
可以请一些人告诉我这是如何实现的? (我使用的是Swift 2,我有书签的文字和这个书签的文字范围。)
答案 0 :(得分:1)
首先使用以下方法获取突出显示文本的CGRect:
let highlightRect = textView.firstRectForRange(highlightRange)
然后将焦点滚动到CGRect:
textView.scrollRectToVisible(highlightRect, animated: true)
如果您需要将NSRange
转换为UITextRange
以使用firstRectForRange
方法。使用类似这样的功能:
func convertRange(range: NSRange, forTextView textView: UITextView) -> (UITextRange){
let beginning = textView.beginningOfDocument
let start = textView.positionFromPosition(beginning, offset: range.location)!
let end = textView.positionFromPosition(start, offset: range.length)!
return textView.textRangeFromPosition(start, toPosition: end)!
}