質問は簡単です。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 を作成しUITableViewCell
、IBOutlets
必要なコンポーネントを追加します。次に、新しい「空の 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;
}