UITableViewCell子类未初始化

时间:2012-10-12 10:12:37

标签: objective-c ios uitableview

我想以编程方式创建自定义tableViewCell。 这就是我的工作:

  1. 创建tableViewCell子类并将其导入tableViewController

  2. 在tableViewController m:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    static NSString *CellIdentifier = @"StoreCell";
    
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    
    if (cell == nil) {
        cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    
    return cell;}
    
  3. 在CustomCell m:

    -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
    
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
    
        NSLog(@"Hello!");
    
        }
        return self;
    }
    
  4. (很抱歉没有让代码突出显示工作原理)

    我的问题是CustomCell没有初始化。 initWithStyle永远不会被触发。我遵循了几个教程,他们做了完全相同的事情,但成功了..

3 个答案:

答案 0 :(得分:2)

对于iOS 6,dequeReusableCellWithIdentifier:forIndexPath:始终返回一个单元格,因此永远不会调用if-case。 如果具有该标识符的单元格不可用,则会自行初始化它。 尝试在UITableViewCell子类中实现initWithCoder:这就是在这种情况下调用的内容。

答案 1 :(得分:1)

在cellForRowAtIndexPath中试试这个

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

{
    static NSString *CellIdentifier = @"StoreCell";

    CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

    return cell;
}

答案 2 :(得分:-1)

我终于明白了。由于我在故事板中使用原型单元格,因此单元格未初始化。我将原型单元格设置为0并且它可以工作:)