cellForRowAtIndex需要花时间从xib加载单元格

时间:2016-02-05 18:12:46

标签: ios objective-c uitableview

我已经使用Xib创建了一个Custom UITableView类。

在我的-cellForRowAtIndex下面编写代码。

问题是推送包含此TableView的屏幕需要2-3秒。

       (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {

        static NSString *simpleTableIdentifier = @"myCell";

        CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];

        }

        cell.selectionStyle = UITableViewCellSelectionStyleNone;


        if(!indexPath.row)
        {
         UIView *separatorView = [[UIView alloc]initWithFrame:CGRectMake(20,14, ScreenWidth-40, 1)];
            separatorView.backgroundColor = [UIColor colorWithWhite:0.4 alpha:0.6];
            [cell addSubview:separatorView];
            self.view.backgroundColor = [UIColor whiteColor];
        }
        else
        {
            UIView *separatorView = [[UIView alloc]initWithFrame:CGRectMake(20,6, ScreenWidth-40, 1)];
            separatorView.backgroundColor = [UIColor colorWithWhite:0.4 alpha:0.6];
            [cell addSubview:separatorView];
            self.view.backgroundColor = [UIColor whiteColor];
        }

        tableView.scrollEnabled = YES;
        self.view.backgroundColor = [UIColor whiteColor];
        return cell;
}

我调试了代码当我返回numberOfRows 0时,我的屏幕立即被推送。即使我返回1行,也需要2-3秒才能加载。

我正在以编程方式创建tableView

修改

我在创建我的表之后在我的viewDidLoad中添加了这个:

   UINib *cellNib = [UINib nibWithNibName:@"CustomCell" bundle:nil];
    [mTableView registerNib:cellNib forCellReuseIdentifier:@"myCell"];

和CellForRowAtIndex方法:

  CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"];

        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        if(cell == nil){

            cell = (CustomCell *)[[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil] lastObject];
            [cell setRestorationIdentifier:@"myCell"];
            self.view.backgroundColor = [UIColor whiteColor];


        }

但是,有什么浪费

3 个答案:

答案 0 :(得分:0)

您需要使用该重用标识符注册加载的nib一次,以便表视图可以使用该标识符进行双击,当前使用标识符进行的dequeing是我的所有时间返回nil。

最好的位置是使用

注册nib在[self.tableView registerNib:cellLoadedFromNib forCellReuseIdentifier:@"myCell"];
cellForRowAtIndexPath:

然后使用以下

[tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath]; 中访问它
{{1}}

确保在启动tableView后在tableView中注册nib。

答案 1 :(得分:0)

如果这是你所声称的,那么问题可能是你没有在主线程上执行[tableView reloadData]。您可以通过调用当前正在调用[tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]方法的reloadData来解决此问题。

答案 2 :(得分:0)

你在-cellForRowAtIndexPath方法中编写代码

tableView.scrollEnabled = YES;
self.view.backgroundColor = [UIColor whiteColor];

负载在主踏板上和每个单元中加载主视图的背景设置次数

在-viewdid load

中编写代码