gpt4 book ai didi

ios - UITextView selectAll 方法未按预期工作

转载 作者:技术小花猫 更新时间:2023-10-29 10:55:57 28 4
gpt4 key购买 nike

我正在为我的 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);
}
}

调用此方法时,控制台输出是我所期望的(即 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];
}
}

但是,它也有同样的问题。

有什么建议吗?

最佳答案

这个解决方案也有效,不需要子类化 UITextView,只需将这个函数放在你的委托(delegate)上:

Objective-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)
}
}

关于ios - UITextView selectAll 方法未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26307436/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com