UITextView外观延迟了

时间:2012-04-18 21:38:15

标签: uitextview

我有一个tableView和一个“重新加载”按钮,用于从URL获取数据并重新加载表,这是一项代价高昂的操作(特别是获取部分)。

我希望在发生这种情况时向用户显示信息,所以我想我会在顶部放置一个“加载”UITextView,执行fetch / reload操作,然后删除UITextView。

以下是代码:

- (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];
}

我得到的行为是fetchData在UITextView在屏幕上呈现之前执行。我知道这是因为我在fetchData中有NSLogs,它们在UITextView出现在屏幕上之前执行。

我有什么明显的遗失吗?感谢。

1 个答案:

答案 0 :(得分:1)

[self fetchData];替换为

[self performSelectorInBackground:@selector(fetchData) withObject:nil];

然后在您的fetchData方法内,完成提取后,添加

[self performSelectorOnMainThread:@selector(fetchDataFinished) withObject:nil waitUntilDone:NO];

新方法fetchDataFinished定义为

-(void) fetchDataFinished{
    [self.tableView reloadData];
    [self.textView removeFromSuperview];
}

请注意,您必须将textView设为属性,以便可以通过此方法访问该属性。

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