我想在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点?
现在,如果显示的文本大于视图大小,则搜索到的文本会突出显示但可能不在可见视图中,我必须手动向下滚动才能看到突出显示的文本。
答案 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);
•获取与CGRect
中textRange
的{{1}}位置相对应的textView
:
var rect = textView.GetFirstRectForRange(textRange);
•然后将scrollView
滚动到rect
,假设textView
的位置(0, 0)
位于scrollView
的内容区域(否则)你必须抵消rect
):
scrollView.ScrollRectToVisible(rect, true);
希望这有帮助!