ios tableViewCell.xib文件生成多个单元格

Posted

技术标签:

【中文标题】ios tableViewCell.xib文件生成多个单元格【英文标题】:ios tableViewCell.xib file generate more than one cell 【发布时间】:2015-08-26 08:31:35 【问题描述】:
- (void)viewDidLoad 
    [super viewDidLoad];
    [self.tableView registerNib:[UINib nibWithNibName:@"FriendTableViewCell" bundle:nil] forCellReuseIdentifier:@"FIDCELL"];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    FriendTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FIDCELL"];
    return cell;

此代码块有效,但是当我在 FriendTableViewCell.xib 中添加新单元格时实际上我无法调用新单元格。我怎么能称这个单元格或者这是可能的?如果这个问题不清楚,我可以添加图片...

**

我尝试从同一个 .xib 调用不同的单元格

**

错误:

【问题讨论】:

只要您有额外的数据要添加到 TableView 中的更多单元格,您的代码就应该生成多个单元格。如果您从视图控制器中发布更多代码会很有帮助。 请添加图片以澄清您的问题,您是否尝试从同一个 .xib 中调用不同的单元格? 新单元的 ID 不是“FIDCELL”吗? @AbdAl-rhmanTaherBadary 是的,我尝试从同一个 .xib 调用不同的单元格这可能吗?如果可能的话,我该怎么做? 我添加了图片,请检查 【参考方案1】:

我找到了解决方案,我生成新的 .xib 并在页面加载它们时调用

[self.tableView registerNib:[UINib nibWithNibName:@"FriendTableViewCell" bundle:nil] forCellReuseIdentifier:@"FIDCELL"];
[self.tableView registerNib:[UINib nibWithNibName:@"Cell2" bundle:nil] forCellReuseIdentifier:@"FIDCELL2"];

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

    NSString *cellID = @"";
    if (indexPath.row % 2 == 0) 
        cellID = @"FIDCELL";
     else 
        cellID = @"FIDCELL2";
    
    FriendTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];

    // Configure the cell...
    cell.nameLabel.text = self.namesArray[indexPath.row];
    cell.photoImageView.image = [UIImage imageNamed:self.photoNameArray[indexPath.row]];

    return cell;

这个代码部分完全可以工作。

【讨论】:

【参考方案2】:

好吧,首先,每个单元格都应该有它的唯一标识符,所以如果第一个单元格有一个名为“FIDCELL”的标识符,那么第二个单元格应该有另一个名为“FIDCELL2”的标识符,然后从 viewDidLoad 中删除以下行:

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

并将其添加到 cellForRowAtIndexPath

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

    CustomTableViewCell * cell ;
    if(condtion1)
    
       cell = [tableView dequeueReusableCellWithIdentifier:firstCellIdentfier];
    
    else if(condtion2)
    
       cell = [tableView dequeueReusableCellWithIdentifier:secondCellIdentfier];
    
    if (cell == nil)
    
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:yourNibName owner:self options:nil];
        if(condtion1)
        
           //0 is the index of the first cell in the nib
           cell = [nib objectAtIndex:0];
        
        else if(condtion2)
        
           //1 is the index of the second cell in the nib .
           cell = [nib objectAtIndex:1] ; 
        

    
       //do other work 
   return cell ;

其中 condtion1 和 condtion2 是决定选择哪个单元格的条件。

【讨论】:

以上是关于ios tableViewCell.xib文件生成多个单元格的主要内容,如果未能解决你的问题,请参考以下文章

TableViewCell.xib 没有出现在 tableview 上

将多个自定义 TableViewCell Xib 索引到 TableView

Xib 到 ViewController

在行选择Swift 3上设置TableViewCell标签颜色

在swift 3中的tableview中更新tableviewcell中的特定行?

iOS开发- 生成/解析.vcf文件