我在 iOS 6 中测试了这个场景并得到了完全相同的结果:“选择”弹出窗口中的属性更改没有触发该 textViewDidChange:
方法。这似乎是一个错误,或者文档需要澄清什么类型的属性更改会触发此事件。
一种可能的解决方法是实现该textViewDidChangeSelection:
方法。每当进行选择时都会调用它(用户在更改属性之前必须这样做)。检查 selectedRange.length 是否 > 0(这意味着已经选择了一个实际的单词,而不是仅仅移动光标),然后保存该 selectedRange。一旦长度再次为零,这意味着他们取消选择该项目。那时,您可以采用先前的范围并使用文本。
- (void)textViewDidChangeSelection:(UITextView *)textView
{
static BOOL rangeSet = NO;
static NSRange mySelectedRange;
if( textView.selectedRange.length > 0 && !rangeSet )
{
mySelectedRange = textView.selectedRange;
rangeSet = YES;
}
else if( textView.selectedRange.length == 0 && rangeSet)
{
// Work with text
NSLog(@"Working with previously select text: %d, %d", mySelectedRange.location, mySelectedRange.length);
}
}