これが私が最終的にやろうとしていることです。UITableView にアイテムのメニューを表示したいのですが、動的に、表示されるアイテムのタイプによってロードされたカスタムセルビューが決定されるようにします。たとえば、メニュー項目タイプが「switch」であるとすると、「switch.xib」という名前の nib がロードされ、その特定のメニュー項目の値に応じて状態がオン/オフになります。「スイッチ」タイプですが、値が異なる項目が 5 つあります。したがって、それぞれに同じxibを使用したいのですが、インスタンスは5つです。
ですから、質問には長い道のりがあります。ペン先からセルビューをロードするとき、画面上でスクロールバックするときのデキュー用に一意の再利用識別子が必要だと思いますよね? (インスタンスごと、つまりメニュー項目ごとに一意です。) Interface Builder の UITableViewCell で、再利用識別子プロパティを設定できる場所がわかりますが、実行時にスイッチのインスタンスごとに設定したいと考えています。たとえば、メニュー項目 #1 はスイッチ、#2 はテキスト フィールド、#3 はスイッチなどです。したがって、#1 と #3 の両方をデキューするには一意のセル ID が必要です。
私の cellForRowAtIndexPath は次のようになります。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Cells are unique; dequeue individual cells not generic cell formats
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d", indexPath.row];
ITMenuItem *menuItem = [menu.menuItems objectAtIndex:indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// Load cell view from nib
NSString *cellNib = [NSString stringWithFormat:@"MenuCell_%@", menuItem.type];
[[NSBundle mainBundle] loadNibNamed:cellNib owner:self options:nil];
cell = myCell;
self.myCell = nil;
}
// Display menu item contents in cell
UILabel *cellLabel = (UILabel *) [cell viewWithTag:1];
[cellLabel setText:menuItem.name];
if ([menuItem.type isEqualToString:@"switch"]) {
UISwitch *cellSwitch = (UISwitch *) [cell viewWithTag:2];
[cellSwitch setOn:[menuItem.value isEqualToString:@"YES"]];
}
else if ([menuItem.type isEqualToString:@"text"]) {
UITextField *textField = (UITextField *) [cell viewWithTag:2];
[textField setText:menuItem.value];
}
return cell;
}