iOS - TableView需要时间来显示

时间:2013-12-29 23:54:30

标签: ios uitableview

我已经以编程方式实现了UITableView并且它工作正常但唯一的问题是,一旦我运行应用程序,它只显示一个白色窗口,然后在大约5-10秒后,它显示tableView。有没有办法让它更快地显示tableView? 这就是我到目前为止所做的:

ACAccountStore *account = [[ACAccountStore alloc]init];
    ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

    [account requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error) {

        if (granted == YES) {

            _accountNumbers = [account accountsWithAccountType:accountType];

            if ([_accountNumbers count] > 1) {

                //create a nagigation bar


                //create a table view
                self.tableView = [self createTableView];
                [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
                [self.view addSubview: self.tableView];

            }

- (UITableView *) createTableView {

    CGFloat x = 0;
    CGFloat y = 50;
    CGFloat width = self.view.frame.size.width;
    CGFloat height = self.view.frame.size.height;
    CGRect tableFrame = CGRectMake(x, y, width, height);

    UITableView *tableView = [[UITableView alloc]initWithFrame:tableFrame style:UITableViewStylePlain];

    tableView.rowHeight = 45;
    tableView.sectionFooterHeight = 22;
    tableView.sectionHeaderHeight = 22;
    tableView.scrollEnabled = YES;
    tableView.showsVerticalScrollIndicator = YES;
    tableView.userInteractionEnabled = YES;
    tableView.bounces = YES;

    tableView.delegate = self;
    tableView.dataSource = self;

    return tableView;


}

是否有理由延迟显示tableView?

2 个答案:

答案 0 :(得分:1)

来自ACAccountStore Class Reference on requestAccessToAccountsWithType:options:completion:

  

在任意队列上调用处理程序。

但是,the "Threading Considerations" section of the UIView Class Reference说:

  

必须在主线程上对应用程序的用户界面进行操作。因此,您应该始终从应用程序主线程中运行的代码调用UIView类的方法。这可能不是绝对必要的唯一时间是创建视图对象本身,但所有其他操作应该在主线程上发生。

因此,请将您的代码更改为:

        if ([_accountNumbers count] > 1) {

            dispatch_sync(dispatch_get_main_queue(), ^{
                //create a table view
                self.tableView = [self createTableView];
                [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
                [self.view addSubview: self.tableView];
            });
        }

答案 1 :(得分:0)

您似乎正在使用Twitter帐户作为数据源。您是否正在制作需要一些时间才能完成的网络请求,然后在表格中显示结果?您的代码不会在发出请求时显示,也不会显示如何计算或创建单元格。