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 に答える