如何在ios中使用UI NIB而不是loadNibNamed用于自定义UI tableview单元?

时间:2014-09-20 07:49:43

标签: ios objective-c uitableview

我正在制作一个自定义ui表视图单元格。我知道我可以使用loadNibNamed方法来使用.xib 但是当我的数据太多时,这会导致滚动速度变慢。

我想使用UI笔尖,因为它比加载自定义单元格loadNibNamed文件的.xib方法快很多。

static NSString *cellIdentifier = @"PostStreamCell";

PostStreamCell *cell= [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PostStreamCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];    
    UINib *cellNib = [UINib nibWithNibName:@"MemberCell" bundle:nil];  
    [cell.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"MemberCell"];
}

cell.textlabel.text =@"xyzabc123";

我尝试在上面的“if”块中使用下面的代码,但未能使用它。任何帮助将不胜感激。

UINib *cellNib = [UINib nibWithNibName:@"PostStreamCell" bundle:nil];      
[cell registerNib:cellNib forCellWithReuseIdentifier:@"PostStreamCell"];

2 个答案:

答案 0 :(得分:2)

  1. 使用UITableViewCell作为顶级对象创建xib文件。这称为Cell.xib
  2. 基于此文件创建UINib对象
  3. 使用表视图注册UINib(通常在表视图控制器子类的viewDidLoad中)。
  4. 在viewDidLoad中使用以下行:

    [self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];
    

    然后,在cellForRowAtIndexPath中,如果你想要一个来自笔尖的单元格,你可以将它出列:

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    

    这会从笔尖创建一个新实例,或者使现有单元格出列。

答案 1 :(得分:1)

您只需要注册一次Xib,因此此regiserNib代码应该位于类文件的viewDidLoad方法中

 UINib *cellNib = [UINib nibWithNibName:@"PostStreamCell" bundle:nil];

 [self.tablview registerNib:cellNib forCellWithReuseIdentifier:@"PostStreamCell"];

然后在tableview的 cellForRowAtIndexPath 方法中

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

    static NSString *cellIdentifier = @"PostStreamCell";

    PostStreamCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    cell.textlabel.text =@"xyzabc123";
}

这将在您需要时为您服务。

干杯

编辑以响应PostStreamCell错误*

请确保您的自定义UITableViewCell xib具有'PostStreamCell'标识符,您可以在IB的这一部分中设置该标识符

enter image description here

请注意xib是UITableViewCell对象。

更新 - 图片显示了检查与xib相关联的自定义类文件的位置

在IB的实用程序中,请确保您的自定义UITableViewCell使用您的自定义类文件PostStreamCell。请检查它们是否显示在IB的这一部分中。

同样在你的UIViewController类文件中,(你有UITableView方法等)确保

#import "PostStreamCell.h"

enter image description here