1

array作成されたがviewWillAppearあり、コンソールでの結果は次のようになります

data SecArray........... (
        (
        "<NSIndexPath 0x7f17630> 2 indexes [0, 0]"
    ),
        (
        "<NSIndexPath 0x7f96430> 2 indexes [1, 0]",
        "<NSIndexPath 0x7f99c70> 2 indexes [1, 1]",
        "<NSIndexPath 0x7f091a0> 2 indexes [1, 2]"
    ),
        (
        "<NSIndexPath 0xe43e8d0> 2 indexes [2, 0]"
    )
)

次のコードを使用してsecArray、に表示されるアイテムのテキストをグレー表示しようとしています。cellForRowAtIndexPath

        if ([self.secArray count] > 0) {

        NSLog( @"GrayText Statement...1...");

        if ([self.secArray containsObject:indexPath]) {

            cell.textLabel.textColor = [UIColor grayColor];
            NSLog( @"GrayText Statement...2...");

        } 


    }

2番目がヒットしない理由がわかりませんif-statement...私は何が欠けていますか?secArray内のすべてのindexPathを取得し、それをグレー表示する正しい方法は何でしょうか。ありがとう。

4

2 に答える 2

1

あなたの意図が「無効な」インデックスの配列を格納することであると推測します。理由を尋ねるつもりはありませんが、あなたの意図を達成するためのより簡単な方法があるかもしれません。

ほぼ確実に、あなたがNSIndexPathあなたに保存したオブジェクトの実際のインスタンスは、あなたに渡されてsecArrayいるものとは異なります。cellForRowAtIndexPathcellForRowAtIndexPathの新しいインスタンスを作成しますNSIndexPath;「古い」インスタンスを保存しています。)

配列に特定のインスタンスが含まれているかどうかを確認するのではなく、それらを比較して等しいかどうかを確認する必要があります。

for (NSIndexPath *path in self.secArray) {
  if ([path compare:indexPath] == NSOrderedSame) {
    cell.textLabel.textColor = [UIColor grayColor];
  }
}
于 2012-10-22T19:28:03.827 に答える
0

これをメソッドに実装してみてくださいtableView:willDisplayCell:forRowAtIndexPath:ドキュメントから:

テーブルビューは、セルを使用して行を描画する直前にこのメッセージをデリゲートに送信します。これにより、デリゲートは、表示される前にセルオブジェクトをカスタマイズできます。このメソッドは、選択や背景色など、テーブルビューによって以前に設定された状態ベースのプロパティをオーバーライドする機会をデリゲートに提供します。デリゲートが戻った後、テーブルビューは、アルファプロパティとフレームプロパティのみを設定し、行をスライドインまたはスライドアウトするときに行をアニメーション化する場合にのみ設定します。

于 2012-10-22T19:27:34.320 に答える