Eth*_*n G 10 selectall objective-c uitextview ios
我正在为我的iPhone 5(其上有iOS 8.0.2)创建一个带有Xcode 6.0.1的iOS 8应用程序.我想这样做,以便当用户点击我时UITextView,所有文本都被选中,这样他就可以轻松地开始输入并删除那里的内容(但我不希望文本被自动删除,因为用户可能想要保留它或附加到它).为此,我有以下代码:
- (void)textViewDidBeginEditing:(UITextView *)textView {
if ([textView hasText]) {
NSLog(@"selectedRange before: %d", textView.selectedRange.length);
[textView selectAll:self];
NSLog(@"selectedRange after: %d", textView.selectedRange.length);
}
}
Run Code Online (Sandbox Code Playgroud)
调用此方法时,控制台输出是我所期望的(即selectedRange长度与textView文本中的字符数相同).但是,没有任何内容显示为选中,UITextView并且它不会被选中(即没有选择菜单弹出).
我在互联网上看到过这样的多个问题,但是所提供的解决方案都没有为我工作(其中一些解决了它作为一个错误而没有提供任何解决方案).将发件人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];
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它有同样的问题.
有什么建议?
bre*_*tne 25
此解决方案也有效,不需要子类化UITextView,只需将此函数放在您的委托上:
目标C -
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
dispatch_async(dispatch_get_main_queue(), ^{
[textView selectAll:nil];
});
return YES;
}
Run Code Online (Sandbox Code Playgroud)
SWIFT 3 -
func textViewDidBeginEditing(_ textView: UITextView) {
DispatchQueue.main.async {
textView.selectAll(nil)
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
@brentvatne 的解决方案对我有用。发布 Swift 语法,以便人们将来可以复制和粘贴。
func textViewShouldBeginEditing(textView: UITextView) -> Bool {
dispatch_async(dispatch_get_main_queue()) {
textView.selectAll(nil)
}
return true
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我找到的解决此问题的最佳解决方案是创建一个自定义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];
}
Run Code Online (Sandbox Code Playgroud)
然后,当您使用文本视图时,将其类型设置为自定义文本视图类型(在代码和故事板中)。selectAll现在您可以在需要时成功调用该方法。我想这也应该适用UITextField,但我还没有尝试过。
| 归档时间: |
|
| 查看次数: |
3764 次 |
| 最近记录: |