UITextView setSelectedRange 问题
UITextView setSelectedRange issue
我已将 UITextView
子类化,目的是引入 placeholder
功能。它大部分运行良好,但当 UITextView
通过用户点击或调用 becomeFirstResponder
激活时,我遇到了问题。下面是每当触发 UITextViewTextDidBeginEditingNotification
通知时调用的自定义方法。
- (void)textViewSelected {
if ([self.text isEqualToString:self.placeholder]) {
NSLog(@"a %@", NSStringFromRange(self.selectedRange));
self.selectedRange = NSMakeRange(0, 0);
NSLog(@"b %@", NSStringFromRange(self.selectedRange));
}
}
控制台记录此
a {16, 0}
b {0, 0}
但是光标还在闪烁
我什至尝试子类化 the setSelectedRange:
方法来检查在我的方法调用后是否设置了范围
- (void)setSelectedRange:(NSRange)selectedRange {
NSLog(@"aa %@", NSStringFromRange(self.selectedRange));
[super setSelectedRange:selectedRange];
NSLog(@"bb %@", NSStringFromRange(self.selectedRange));
}
但是结果如下:
a {16, 0}
aa {16, 0}
bb {0, 0}
b {0, 0}
这意味着光标应位于索引 0。
有人知道这里出了什么问题吗?
我无法弄清楚为什么 NSMakeRange(0, 0)
不起作用,但我最终通过延迟调用 NSMakeRange(0, 0)
解决了我的问题,如下所示:
[self performSelector:@selector(placeMarkerInTheBeginning) withObject:nil afterDelay:0.01];
和
- (void)placeMarkerInTheBeginning {
self.selectedRange = NSMakeRange(0, 0);
}
希望这对某人有所帮助。
我已将 UITextView
子类化,目的是引入 placeholder
功能。它大部分运行良好,但当 UITextView
通过用户点击或调用 becomeFirstResponder
激活时,我遇到了问题。下面是每当触发 UITextViewTextDidBeginEditingNotification
通知时调用的自定义方法。
- (void)textViewSelected {
if ([self.text isEqualToString:self.placeholder]) {
NSLog(@"a %@", NSStringFromRange(self.selectedRange));
self.selectedRange = NSMakeRange(0, 0);
NSLog(@"b %@", NSStringFromRange(self.selectedRange));
}
}
控制台记录此
a {16, 0}
b {0, 0}
但是光标还在闪烁
我什至尝试子类化 the setSelectedRange:
方法来检查在我的方法调用后是否设置了范围
- (void)setSelectedRange:(NSRange)selectedRange {
NSLog(@"aa %@", NSStringFromRange(self.selectedRange));
[super setSelectedRange:selectedRange];
NSLog(@"bb %@", NSStringFromRange(self.selectedRange));
}
但是结果如下:
a {16, 0}
aa {16, 0}
bb {0, 0}
b {0, 0}
这意味着光标应位于索引 0。
有人知道这里出了什么问题吗?
我无法弄清楚为什么 NSMakeRange(0, 0)
不起作用,但我最终通过延迟调用 NSMakeRange(0, 0)
解决了我的问题,如下所示:
[self performSelector:@selector(placeMarkerInTheBeginning) withObject:nil afterDelay:0.01];
和
- (void)placeMarkerInTheBeginning {
self.selectedRange = NSMakeRange(0, 0);
}
希望这对某人有所帮助。