将UIView设计为具有单独xib文件的tableview单元格

时间:2013-10-09 07:22:49

标签: iphone ios ios5 ios4 ios6

我需要将UIView设计为具有单独xib文件的tableview单元格。 我还尝试创建一个单独的xib并将其视图设置为与tableview单元格类型相匹配。 但它失败了,有没有编程指南来创建自定义,可重用的tableview单元格创建?

创建自定义tableview单元格后,我们如何将其添加到表格视图中?

6 个答案:

答案 0 :(得分:8)

  1. 您需要继承UITableViewCell,然后添加新的“查看”文件(请参阅下图) enter image description here

  2. 删除UIView中的.xib文件,然后从Table View Cell添加object library

  3. 3.设置单元格的自定义类

    enter image description here

    CustomCell *cell = (CustomCell*)[tableView    dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        // Load the top-level objects from the custom cell XIB.
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        // Grab a pointer to the first object (presumably the custom cell, as that's all the XIB should contain).
        cell = [topLevelObjects objectAtIndex:0];
    }
    

答案 1 :(得分:1)

您可以创建单独的NIB来存储表格单元格。在viewDidLoad中为每个单元格类型注册Nib文件:

#define kMyCellIdentifier @"kMyCellIdentifier"

....

- (void)viewDidLoad
{
  UINib *tableCellNib = [UINib nibWithNibName:@"MyCell" bundle:nil];
  [self.tableView tableCellNib forCellReuseIdentifier:kMyCellIdentifier];
}

然后,您可以在被要求时创建该单元格。既然你已经注册了Nib iOS,那么如果还没有一个出局,iOS会处理为你创建单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kMyCellIdentifier];

  // Configure cell...

  return cell;
}

你也可以直接在IB中创建故事板中的原型单元格,但如果你有一个通用的应用程序,那就很痛苦,因为你需要维护同一单元格的iPad和iPhone版本。

答案 2 :(得分:1)

你可以找到一个演示here并且共享内部有一个自定义单元格文件夹,希望你能够找到所有的东西并根据你的需要修复它。

答案 3 :(得分:1)

在委托方法的cellforrowindexpath方法中添加如下: -

UIView *myView = [UIView alloc]init]; //or initwithframe
myview.frame = cell.contentView.frame;

如果想确定然后设置背景颜色

myview.backgroundColor = [UIColor yellowColor];  //Or any other color.
[cell addsubview :myview];

谢谢。 如果您有任何疑问,请随时联系。

答案 4 :(得分:0)

cellForRowAtIndexPath委托方法中,执行以下操作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"customCellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"customCellIdentifier"];

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


    UIView *view =[[UIView alloc]init];
    view.frame = cell.contentView.frame;

    view.backgroundColor = [UIColor redColor];//To be sure that the custom view in the cell
    [cell addSubview:view];

    return cell;
}

答案 5 :(得分:0)

首先,您必须创建一个具有您的单元类类配置的文件,并且从UITableViewCell类中获取数据。创建仅具有表视图单元的一个XIB文件。然后将自定义单元类文件导入视图或视图控制器并实现以下方法。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];
            YOUR_CUSTOM_CELL_CLASS * cell = (YOUR_CUSTOM_CELL_CLASS *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
            return [self createCustomCell:cell cellForRowAtIndexPath:indexPath];
}


-(YOUR_CUSTOM_CELL_CLASS *)createCustomCell:(YOUR_CUSTOM_CELL_CLASS *)cell cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
if (cell == nil)
    {
        cell = (YOUR_CUSTOM_CELL_CLASS *)[[[NSBundle mainBundle] loadNibNamed:@"YOUR_CUSTOM_CELL_CLASS_XIB_FILE_NAME" owner:self options:nil] objectAtIndex:0];
    }
    return cell;
}