0

私は Xcode 5 を使用しており、動的なプロトタイプ セルやregisterClass:forCellReuseIdentifier.

UITableViewストーリーボードを作成し、その上に 1 つのプロトタイプ動的セルをドロップしました。セルのクラスを にItemCell設定し、再利用識別子を に設定しましたItemCell

ItemCell クラスにはnameLabelIBOutlet が含まれており、これをドラッグしてプロトタイプ セル内のラベルに接続しました。

ViewController で、再利用識別子ItemCellに使用するクラスを登録します。ItemCell

- (void)viewDidLoad {
    [super viewDidLoad];

    [_tableView registerClass:[ItemCell class] forCellReuseIdentifier:@"ItemCell"];
}

tableView:cellForRowAtIndexPath では、セルをデキューし、nameLabel のプロパティを設定します。self.items は文字列の NSArray です。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        ItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ItemCell" forIndexPath:indexPath];
        cell.nameLabel.text = [self.items objectAtIndex:indexPath.row];

        return cell;
}

つまり、ItemCell として作成されていますが、ストーリーボードからロードされていません。initWithStyle:reuseIdentifier と initWithCoder をオーバーライドして、どちらが呼び出されたかを確認することで、これを確認しました。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        NSLog(@"NOT STORYBOARD");
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Initialization code
        NSLog(@"Yay, it's working!");
    }
    return self;

}

毎回、それinitWithStyleが呼び出されています。私が読んだすべてから、これはうまくいくはずです。クラスがストーリーボードにある場合、何らかの方法でクラスを別の方法で登録する必要があることを示すものは何も見つかりませんが、明らかに、セルはストーリーボードが関連付けられていることを認識していません。

私は完全な初心者の間違いを犯していると確信していますが、それを理解することはできません. どんな助けでも大歓迎です。

4

1 に答える 1