5

同じxib内に複数のカスタムuitableviewCellを含めることは可能ですか?

同じxib内でカスタマイズされたさまざまなセルを組み合わせて、テーブルにさまざまなセルをロードさせることで、XIBファイルを保存しようとしています。

IBでは、各uiTableViewCellクラスを異なるカスタムクラス.m/.h実装に設定してみました。これが私が試したことです:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *cellIdentifier = @"DevConfigCell";

DeviceInfoCell *cell = (DeviceInfoCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if(cell == nil)
{

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell~iphone" owner:self options:nil];
    cell = ( DeviceInfoCell *)[nib objectAtIndex:0];

}

return cell;
}

別のテーブルでは、ペン先を再利用しますが、これを行います。

    cell = ( SecondDeviceInfoCell *)[nib objectAtIndex:0];

何らかの理由で、常に最初のセルをロードします。

これはすべて機能する必要がありますか?または方法はありますか?

ありがとう

4

2 に答える 2

4

同じxib内で異なるカスタマイズされたセルを組み合わせてXIBファイルを保存しようとしています

なんで?作成できる.xibファイルの数に制限はありません。

次に、テーブルに別のテーブルをロードさせます。

.xibをロードすると、ファイルに含まれるすべてのオブジェクトが作成されます。1つの.xibに10個のカスタムセルを配置する場合、その.xibをロードすると、それらの10個のセルのそれぞれのインスタンスが作成されます。それはおそらくあなたが望むものではありません。セルを別々の.xibsに保持することは、おそらくより良い計画です。

cell = ( SecondDeviceInfoCell *)[nib objectAtIndex:0];

あなたはキャスティングが何をするかについて混乱しているようです。あるタイプから別のタイプにキャストするとき、どういうわけか別のオブジェクトを選択しているわけではありません。配列の内容が同じである場合、によって返されるオブジェクト[nib objectAtIndex:0]は常に同じになります。nibキャストは、コンパイラーが値に関連付けるタイプを変更するだけです。この場合、ポインタのタイプを変更します。

ビューコントローラでを作成しIBOutletCollectionてから、いくつかの異なるカスタムセルをそのアウトレットコレクションに接続できます。これにより、を使用して選択できるセルの配列が得られますobjectAtIndex:。ただし、 1つだけ必要になるたびにファイル内のすべてのセルを作成するため、これは実際には良い考えではありません。

于 2012-08-30T16:17:43.940 に答える
0
   NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"PlayerAvgsTableCell" owner:nil options:nil];
    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[PlayerAvgsTableCell class]])
        {
            cell = (PlayerAvgsTableCell *)currentObject;
            break;
        }
    }
}
于 2013-09-21T17:24:43.680 に答える