私は Xcode 5 を使用しており、動的なプロトタイプ セルやregisterClass:forCellReuseIdentifier
.
UITableView
ストーリーボードを作成し、その上に 1 つのプロトタイプ動的セルをドロップしました。セルのクラスを にItemCell
設定し、再利用識別子を に設定しましたItemCell
。
ItemCell クラスにはnameLabel
IBOutlet が含まれており、これをドラッグしてプロトタイプ セル内のラベルに接続しました。
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
が呼び出されています。私が読んだすべてから、これはうまくいくはずです。クラスがストーリーボードにある場合、何らかの方法でクラスを別の方法で登録する必要があることを示すものは何も見つかりませんが、明らかに、セルはストーリーボードが関連付けられていることを認識していません。
私は完全な初心者の間違いを犯していると確信していますが、それを理解することはできません. どんな助けでも大歓迎です。