首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITextView显示延迟

UITextView显示延迟
EN

Stack Overflow用户
提问于 2012-04-19 05:38:15
回答 1查看 234关注 0票数 0

我有一个tableView和一个“重新加载”按钮,它从一个URL获取数据并重新加载表格,这是一个开销很大的操作(特别是获取部分)。

当发生这种情况时,我想向用户显示信息,所以我想我应该在顶部放置一个“加载”UITextView,执行获取/重新加载操作,然后删除UITextView。

代码如下:

代码语言:javascript
复制
- (IBAction)refreshData:(id)sender {

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height-30, self.view.frame.size.width, 30)];
    [self.view addSubview:textView];
    textView.text = @"Loading..";
    textView.textColor = [UIColor whiteColor];
    textView.backgroundColor = [UIColor grayColor];
    textView.editable = NO;

    [self fetchData];
    [self.tableView reloadData];

    [textView removeFromSuperview];
}

我得到的行为是在屏幕上呈现UITextView之前执行fetchData。我之所以知道这一点,是因为我在fetchData中有在UITextView显示之前执行的NSLogs。

有什么明显的我遗漏了什么吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-19 06:05:18

[self fetchData];替换为

代码语言:javascript
复制
[self performSelectorInBackground:@selector(fetchData) withObject:nil];

然后,在fetchData方法中,在获取完成后,添加

代码语言:javascript
复制
[self performSelectorOnMainThread:@selector(fetchDataFinished) withObject:nil waitUntilDone:NO];

其中新方法fetchDataFinished被定义为

代码语言:javascript
复制
-(void) fetchDataFinished{
    [self.tableView reloadData];
    [self.textView removeFromSuperview];
}

请注意,您必须使textView成为一个属性,以便在此方法中可以访问它。

我没有针对您的特定情况尝试过上面的方法,但我已经在许多类似的情况下成功地使用了类似的构造。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10218429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档