Xib ファイルからカスタム UITableViewCells をロードするにはどうすればいいですか? 質問する

Xib ファイルからカスタム UITableViewCells をロードするにはどうすればいいですか? 質問する

質問は簡単です。XibUITableViewCellファイルからカスタムをロードするにはどうすればいいでしょうか? そうすることで、Interface Builder を使用してセルを設計できるようになります。メモリ管理の問題により、答えは明らかに単純ではありません。このスレッド問題に触れ、解決策を提案していますが、NDAリリース前であり、コードがありません。ここに長い糸明確な答えを出さずに問題について議論している。

私が使用したコードは次のとおりです:

static NSString *CellIdentifier = @"MyCellIdentifier";

MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
    cell = (MyCell *)[nib objectAtIndex:0];
}

このコードを使用するには、 の新しいサブクラスである MyCell.m/.h を作成しUITableViewCellIBOutlets必要なコンポーネントを追加します。次に、新しい「空の XIB」ファイルを作成します。IB で Xib ファイルを開き、オブジェクトを追加し、UITableViewCellその識別子を「MyCellIdentifier」に設定し、そのクラスを MyCell に設定して、コンポーネントを追加します。最後に、 をIBOutletsコンポーネントに接続します。IB でファイルの所有者を設定していないことに注意してください。

他の方法では、ファイルの所有者を設定することを推奨し、Xib が追加のファクトリ クラスを介してロードされていない場合はメモリ リークを警告します。私は Instruments/Leaks で上記をテストしましたが、メモリ リークは見られませんでした。

では、Xibs からセルをロードする標準的な方法は何でしょうか? ファイルの所有者を設定しますか? ファクトリーは必要ですか? もしそうなら、ファクトリーのコードはどのようになりますか? 複数のソリューションがある場合は、それぞれの長所と短所を明確にしましょう...

ベストアンサー1

正しい解決策は次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    UINib *nib = [UINib nibWithNibName:@"ItemCell" bundle:nil];
    [[self tableView] registerNib:nib forCellReuseIdentifier:@"ItemCell"];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Create an instance of ItemCell
    PointsItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ItemCell"];

    return cell;
}

おすすめ記事