Swift +搜索字符串并转到(设置焦点)到它的发生

时间:2016-01-28 05:59:12

标签: swift uitextview

我是斯威夫特的新手,所以请原谅我的无知。

我正在做一本有很多章节的书籍应用程序 我已经提供了添加和保存书签的功能。我在标签上显示这个书签字符串。点击此书签后,我可以转到包含此书签的章节 我使用了UITextView highlight all matches using swift中接受的答案中的一些代码作为参考。

我面临的问题是:
1.我无法将焦点转移到该章节上的书签字符串。

例如:我在第1章的末尾保存了一个书签。下次我点击书签时,我希望转到保存的书签位置,即本章末尾。到目前为止我所取得的成就是将书签定位的hghlight。在这种情况下,由于书签位于章节的末尾,我仍然需要向下滚动才能到达我的书签位置。

可以请一些人告诉我这是如何实现的? (我使用的是Swift 2,我有书签的文字和这个书签的文字范围。)

1 个答案:

答案 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)!
}