1

我想以编程方式创建一个自定义 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;
    }
    

(很抱歉没有让代码突出显示的东西起作用)

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

4

3 回答 3

2

在 iOS 6 中, dequeReusableCellWithIdentifier:forIndexPath: 总是返回一个单元格,所以你的 if-case 永远不会被调用。如果具有该标识符的单元格不可用,它将自行初始化。尝试在 UITableViewCell 子类中实现 initWithCoder:,这就是在这种情况下调用的方法。

于 2012-10-12T10:15:54.280 回答
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;
}
于 2012-10-12T10:47:10.337 回答
-1

我终于弄明白了。单元格没有被初始化,因为我在情节提要中使用了原型单元格。我将原型单元格设置为 0 并且它可以工作:)

于 2012-10-31T09:39:52.667 回答