gpt4 book ai didi

ios - UITableView beginUpdates/endUpdates 使打字变慢

转载 作者:行者123 更新时间:2023-11-29 02:51:53 25 4
gpt4 key购买 nike

我在每个单元格中使用一个 UITableView 和一个 UITextView 来增加/减少它的高度以适应键入时的文本。为此,我更新了 -textViewDidChange: 委托(delegate)方法中的 UITableView,方法如下:

[self.tableView beginUpdates];
[self.tableView endUpdates];

一切正常。但是,我注意到打字速度变慢了(具体来说是 iPhone 4)。我计算高度的方法只是通过将 -sizeToFit 方法应用于 UITextView 中的文本返回一个 CGFloat。我删除了这段代码,但没有任何变化,这就是为什么我确定问题出在 beginUpdates/beginUpdates 方法中。我的问题是是否有办法以有效的方式完成此任务?我不想那样离开。

编辑

代码:

-(void)textViewDidChange:(UITextView *)textView
{
[self.tableView beginUpdates];
[self.tableView endUpdates];

[self adjustTextViewHeightToString:textView];
}

- (void)adjustTextViewHeightToString:(UITextView *)textview
{
CGFloat width = textview.frame.size.width;

[textview setScrollEnabled:NO];
[textview sizeToFit];
[textview setFrame:CGRectMake(textview.frame.origin.x, textview.frame.origin.y, width, textview.frame.size.height)];
}

最佳答案

我认为每次键入或删除字符时更改 textView 高度的问题 - 这不是很有效,尤其是当您键入速度非常快时。一开始你不应该调用 beginUpdates & endUpdates 除非你要插入、删除或选择行。正如文档中所说: beginUpdates
开始一系列插入、删除或选择接收器的行和部分的方法调用。
而您没有执行这些操作。

其次:尝试在您的 -(void)textViewDidChange:(UITextView *)textView 中检查文本是否不适合该行,如果是,则增加高度:

创建一个 CGRect 变量并最初将 CGRectZero 存储在 viewWillAppear 的某处,如下所示:previousRect = CGRectZero ; 然后在委托(delegate)方法中:

- (void)textViewDidChange:(UITextView *)textView {

UITextPosition* pos = textView.endOfDocument;
CGRect currentRect = [textView caretRectForPosition:pos];
if (currentRect.origin.y > previousRect.origin.y) {
[self adjustTextViewHeightToString:textView];
}
previousRect = currentRect;
}

这不是最有效的方法,但很少会更新 TableView 。

关于ios - UITableView beginUpdates/endUpdates 使打字变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390354/

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