我在 textViewDidChangeSelection 委托中为 textView 设置 selectedRange 属性时遇到了一个奇怪的行为。
我在 viewDidLoad 中的代码是:
hiddenTextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 500, 500)];
//[hiddenTextView setHidden:YES];
_hiddenTextViewText=@"ulrd";
hiddenTextView.text = _hiddenTextViewText;
hiddenTextView.delegate = self;
_hiddenTextViewDefaultRange = NSMakeRange(2,0);
hiddenTextView.selectedRange = _hiddenTextViewDefaultRange; //horizontal and vertical center of the textview
[self.view addSubview:hiddenTextView];
[hiddenTextView becomeFirstResponder];
if (_keyboardShown)
[hiddenTextView resignFirstResponder];
我将 textViewDidChangeSelection 定义如下:
- (void)textViewDidChangeSelection:(UITextView *)textView {
NSLog(@"%lu",(unsigned long)textView.selectedRange.location);
if (textView.selectedRange.location != _hiddenTextViewDefaultRange.location)
{
hiddenTextView.selectedRange = _hiddenTextViewDefaultRange;
}
}
我设置了一个 4 个字符的文本并将选择索引放在位置 2(中间)。结果是,如果我在模拟器 NSLog 中按键盘上的向上箭头输出 0(文本开头),然后是 2(重置位置),这是正确的。如果我再次按下它会做同样的事情,所以仍然正确。问题是,如果我击中 x 次,我必须击中相等的次数才能到达文本的末尾(位置 4)。我尝试使用 UIButton 重置位置,而不是以编程方式进行,它工作正常。有任何想法吗?