自定义UITableView子类单元格?

时间:2012-04-06 16:54:27

标签: iphone objective-c uitableview

我已经在Interface Builder中创建了自定义单元格,并为它创建了一个自定义的UITableViewCell类,但是当它加载时没有对它进行任何更改。我在自定义类中有这个代码:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
    {
        // Initialization code

        //Get the wedding date and display it
        myLabel.text = @"Hello";
    }
    return self;
}

myLabel已在标题中声明,有一个属性并已在“界面”构建器中链接,但是当我运行应用程序并查看我的表时,我没有得到“Hello”文本。有什么想法吗?

感谢。

编辑:

我没有使用nib文件,我在故事板中的UITableViewController中使用它。另外,下面是cellForRowAtIndexPath代码,我只需要一个填充了所需单元格标识符的数组,然后创建所述数组:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    static NSString *CellIdentifier;

    for (int cell = 0; cell <= [tableCellsArray count]; cell++) 
    {
        if ([indexPath row] == cell) 
        {
            CellIdentifier = [tableCellsArray objectAtIndex:cell];
        }
    }

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

    // Configure the cell...

    return cell;
}

2 个答案:

答案 0 :(得分:0)

浏览Apple documentation,其中介绍了如何自定义UITableViewCell。

在上面的页面中,pl。请参阅清单5-5 Loading a cell from a nib file and assigning it content,其中明确说明了使用nib文件自定义单元格。

答案 1 :(得分:0)

你如何创建你的细胞?你是从Nib加载它还是分配它? 如果您分配它,则需要正确初始化实例(例如myLabel)。 如果你从笔尖加载单元格,我担心

  
      
  • (id)initWithCoder:(NSCoder *)aDecoder
  •   

是您要覆盖的init方法。

无论如何,你可以放一个断点来确保你通过那里并打印myLabel以确保它被正确初始化。

- 编辑

如果您想使用nib定制单元格视图,则无法使用initWithStyle初始化单元格视图:reuseIdentifier:method。

使用initWithStyle:reuseIdentifier:表示您将通过自己的实现初始化所有视图(例如,您将分配,初始化和配置所有视图,它不会使用xib文件)

如果要使用xib文件,则需要在NSBundle中使用loadNibNamed:owner:options:方法。

通常,我见过两种实现:

  

[[NSBundle mainBundle] loadNibNamed:@“”owner:self options:nil];

在此实现中,您加载xib,将UIViewController子类作为所有者。在xib中,确保File Owner类是您的UIViewController子类。然后只需将单元格与UIViewController子类的属性链接并调用loadNibNamed:owner:options:将只分配并初始化一个新的单元格视图,该视图将在UIViewController子类的属性中可用。这就是Apple文档建议您做的事情。

  

NSArray * nibObjects = [[NSBundle mainBundle] loadNibNamed:@“”owner:nil options:nil];   UITableViewCell myCustomCell = [nibObjects objectAtIndex:0];

在此实现中,您不会将任何所有者传递给xib文件并获取所需的对象。只需确保您的xib文件只有一个对象,即单元格视图。我更喜欢这种方法,因为我觉得拥有一个创建单元格的属性是“奇怪的”,但你需要确保你的xib文件的内容将你的自定义单元格视图保持在0索引。

无论选择哪种方法,请记住加载xib会调用

  

的initWithCoder:   代替   initWithStyle:reuseIdentifier:

最后,我建议你去看看Aadhira的Apple文档链接,该文档解释了如何将自定义UITableCellView与xib文件一起使用。