0

// 実際の質問
nib で指定されたものとは異なるセル識別子を使用して、nib ファイル (tableviewcell) をロードする際に助けが必要です。

// 私がやっていることの背景 私は
いくつかのラベル、いくつかの画像、いくつかのボタンを持つカスタム UITableViewCell を持っています。これらはすべて nib ファイルに配置されています。テーブルビュー セルのコンテンツは、特定の条件に基づいて動的に変更する必要があります。つまり、横長の場合はボタンが表示されません。ラベルに表示するコンテンツがない場合、ラベルは表示されません。左側の隣接するラベル/ビューは、欠落しているラベル/ボタンのスペースを埋めるために拡張する必要があります。

私はこれを機能させることができます。私がこれを行った方法は、cellForRowAtIndexPathI - を使用して
表示する必要のないビューを削除し、 調整が必要なビューを呼び出します。 removeFromSuperView
framesetNeedsDisplay

セルをデキューするために、nib ファイルに記載されているのと同じセル識別子を使用します。返されたセルが nil の場合、 を使用しloadNibNamed:withOwner:optionsて nib をロードします。ただし、再利用されているセルには、既に削除されている可能性があるため、条件が満たされていない場合にコンテンツを表示するために必要なビューがない可能性があるため、前後にスクロールすると問題が発生するのではないかと心配しています。

この問題を修正するために、セルの異なるルック アンド フィールをトリガーするさまざまな条件に対して、異なるセル識別子を使用することを計画しています。または、ビューを非表示にして、隣接するビューを非表示のビューに拡張することも検討しています。このように、異なるセル識別子を扱う必要はありません。

Edit2:
隣接するビューのフレームを非表示にして調整するという私の代替アプローチは、私のニーズに合っていました。

ただし、上記で説明した実際の質問に対する答えを見つけたいと思っています。

// 考えられる解決策関数のパラメーターを
介してセル識別子を nib 読み込みコードに渡すことができるかどうか疑問に思っていました。これは可能ですか?これを達成するためのサンプルコードを提供できれば、それは素晴らしいことです。 optionsloadNibNamed

御時間ありがとうございます。

4

3 に答える 3

0

あなたがする必要があるのは、異なる識別子でペン先に複数のセルを作成dequeueReusableCellWithIdentifierし、適切なタイプのセルへの参照を取得するために適切な識別子で呼び出すことです。

于 2012-05-11T05:02:28.790 に答える
0

私はこのソリューションをあまり誇りに思っておらず、問題が発生する可能性がありますが、ペン先からロードした後にセルの識別子を設定してみます。

- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
    self = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil].lastObject;
    [self setValue:reuseIdentifier forKeyPath:@"_reuseIdentifier"];

    // ...

    return self;
}
于 2012-12-06T08:34:07.850 に答える
-1

nib で指定されたセル再利用識別子を変更することはできません。参照。あなたが話しているオプション辞書もこれを行いません。オプションは nib のプロキシ オブジェクトに関連しています。

サブビューを削除するのではなく、単純に非表示にする方がよいでしょう。IBOutletCollections を使用して、一括非表示/非表示を簡単にすることができます。必要に応じて、セルをデフォルトの状態にリセットできprepareForReuseます。

UINib も見てください。これにより、nob からのオブジェクトの作成が loadNibNamed よりも高速になり、スクロールのパフォーマンスが向上します。

于 2012-05-12T06:57:25.710 に答える