如何查找scrollview contentoffset Y点以使所选文本可见。

时间:2018-02-22 19:17:30

标签: ios xamarin uiscrollview

我想在scrollview中使用textview实现文本搜索功能。我已经使用“上一个”和“下一个”按钮连接了一个textview。当用户点击任一按钮时,它应滚动到要搜索的单词/句子。

使用字符串属性和NSRange我能够找到并突出显示用户选择的单词或句子。

var colorText = new NSMutableAttributedString(fileString, attrFont);
var attrHL = new UIStringAttributes { ForegroundColor = UIColor.Red };
colorText.AddAttributes(attrHL.Dictionary, new NSRange(idxStart, length);

但我无法弄清楚如何使滚动视图滚动到所选文本并使其可见。由于textview中显示的文本大于scrollview的大小,我必须使用contentoffset.Y来移动可见视图,但是如何找到所选单词/句子的Y点?

现在,如果显示的文本大于视图大小,则搜索到的文本会突出显示但可能不在可见视图中,我必须手动向下滚动才能看到突出显示的文本。

1 个答案:

答案 0 :(得分:1)

假设您知道与您想要滚动到的文字位对应的NSRange(名为range),那么您的UIScrollView名称为scrollView,而您的UITextView 1}}被命名为textView

•将NSRange值转换为UITextRange

var startPosition = textView.GetPosition(textView.BeginningOfDocument, range.Location);
var endPosition = textView.GetPosition(startPosition, range.Length);

var textRange = textView.GetTextRange(startPosition, endPosition);

•获取与CGRecttextRange的{​​{1}}位置相对应的textView

var rect = textView.GetFirstRectForRange(textRange);

•然后将scrollView滚动到rect,假设textView的位置(0, 0)位于scrollView的内容区域(否则)你必须抵消rect):

scrollView.ScrollRectToVisible(rect, true);

希望这有帮助!