如何在同一个xib中放置自定义单元格和表格视图?

时间:2016-03-26 04:23:52

标签: ios objective-c uitableview

我有包含UITableView的XIB,并且在同一个XIB中我创建了UITableViewCell,我没有将任何类设置为单元格,我只是将标识符设置为单元格。

现在我想将该单元格加载到tableview委托方法cellForRowAtIndexPath

我做的是:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    return cell;
}

但是它会创建一个不包含我创建的xib的新单元格。

那么如何从表格视图中的相同xib获取该单元格呢?

3 个答案:

答案 0 :(得分:0)

如果你正在创建一个自定义单元格,那么如果你创建UITableViewCell类型的自定义类然后在方法中实例化你的UITableViewCell类会更好。如果你不想创建自定义类,那么下面是可以帮助你的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *CustomCellIdentifier = @"SimpleTableItem";
   UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];
   if (cell == nil)
   {
     cell = (UITableViewCell *)[[[NSBundle mainBundle] loadNibNamed:@"TMPartnerLoyalty" owner:self options:nil] objectAtIndex:0];
   }
   return cell;

}  

此处,TMPartnerLoyalty是xib的名称。

答案 1 :(得分:0)

请在viewdidload中编写此代码,希望它对您有用。

NSString *nibName = @"give your xib name here that contain Tablecell";
NSString *simpleTableIdentifier = @"SimpleTableItem";
UINib *customCellNib = [UINib nibWithNibName:nibName bundle:nil];
[tableView registerNib:customCellNib forCellReuseIdentifier:simpleTableIdentifier];

答案 2 :(得分:0)

如果您使用原型单元格,则标识符名称必须与dequeueReusableCellWithIdentifier名称相同

注意:如果您使用原型单元格,则不需要注册单元格。因为原型单元格不是CustomCell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
   if(cell == nil)
   {
     cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   }
   cell.textLabel.text = @"";
   return cell;
}

如果您使用UITableViewcell(自定义单元格),请按照以下步骤

1.在viewDidLoad中,您必须注册UITableViewCell或Custom Cell

UINib *cellNib = [UINib nibWithNibName:@"YourUITableViewCell" bundle:[NSBundle mainBundle]];
[self.tableView registerNib:cellNib forCellReuseIdentifier:@"cell"];

2.OR在cellForRowAtIndexPath中你可以像这样编写下面的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *customTableIdentifier=@"cell";
  YourUITableViewCell *cell=(YourUITableViewCell*)[tableView dequeueReusableCellWithIdentifier:customTableIdentifier];
  if (cell==nil)
  {
    NSArray *nibs=[[NSBundle mainBundle]loadNibNamed:@"YourUITableViewCell" owner:self options:nil];
    cell=[nibs objectAtIndex:0];
  } 
  cell.yourTableViewCellLabel.text = @"";
  cell.yourTableViewCellTextField.text = @"";
  cell.yourTableViewCellButton.text = @"";
  return cell;
}