UITextView selectAll方法无法按预期方式工作
我使用Xcode 6.0.1为我的iPhone 5(其中包含iOS 8.0.2)创建iOS 8应用程序。我想这样做是为了当用户点击我的UITextView
时,所有文本都会被选中,这样他就可以轻松地开始输入和删除那里的内容(但我不希望文本被自动删除,因为用户可能想要保留它或追加到它)。要做到这一点,我有以下代码:UITextView selectAll方法无法按预期方式工作
- (void)textViewDidBeginEditing:(UITextView *)textView {
if ([textView hasText]) {
NSLog(@"selectedRange before: %d", textView.selectedRange.length);
[textView selectAll:self];
NSLog(@"selectedRange after: %d", textView.selectedRange.length);
}
}
当这个方法被调用,控制台输出是什么,我希望(即selectedRange
长度是一样的人物在textView
的文字数) 。然而,在UITextView
中没有任何显示,并且它没有被选择(即没有选择菜单弹出)。
我在网上看到过类似这样的多个问题,但没有一个提供的解决方案为我工作(其中一些人在没有提供任何解决方案的情况下将它写成了bug)。将发件人ID更改为self
以外的内容(例如nil
)没有帮助,也没有帮助按照一个人的建议拨打[textView select:self]
。我也试过这个代码:
- (void)textViewDidBeginEditing:(UITextView *)textView {
if ([textView hasText]) {
UITextRange *range = [textView textRangeFromPosition:textView.beginningOfDocument toPosition:textView.endOfDocument];
[textView setSelectedTextRange:range];
}
}
但是,它有同样的问题。
有什么建议吗?
我发现了这个问题,到目前为止最好的解决方法是创建一个自定义UITextView
(即创建一个扩展UITextView
一个新的类),然后实现selectAll
方法是这样的:
- (void)selectAll:(id)sender {
[super selectAll:sender];
UITextRange *selectionRange = [self textRangeFromPosition:self.beginningOfDocument toPosition:self.endOfDocument];
[self performSelector:@selector(setSelectedTextRange:) withObject:selectionRange afterDelay:0.0];
}
然后当您使用文本视图,将其类型设置为您的自定义文本视图类型(在您的代码和故事板中)。现在您可以在需要时成功拨打selectAll
方法。我想这也应该与UITextField
一起工作,但我还没有尝试过。
这种解决方案也是一样,不需要继承UITextView
,只是把这个功能您的委托:
目标C -
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
dispatch_async(dispatch_get_main_queue(), ^{
[textView selectAll:nil];
});
return YES;
}
SWIFT 3 -
func textViewDidBeginEditing(_ textView: UITextView) {
DispatchQueue.main.async {
textView.selectAll(nil)
}
}
这个答案是非常荒谬的。它也是100%正确! – 2015-05-21 22:19:12
@brentvatne“我的解决方案为我工作。发布Swift语法,以便人们可以在将来复制和粘贴。
func textViewShouldBeginEditing(textView: UITextView) -> Bool {
dispatch_async(dispatch_get_main_queue()) {
textView.selectAll(nil)
}
return true
}
奇怪的行为。正如你可以在http://m.youtube.com/watch?v=iPXsVvva97E这个视频中看到的,它应该像这样工作。 – TMob 2014-10-10 20:30:14
正是如此。我也看过那个视频,不知道我做错了什么。 – 2014-10-10 20:54:51
我有同样的问题,你有没有发现任何修复? – 2014-11-28 16:24:41