2009-07-13 6 views
0

コードからカスタムUITableViewCellを設定しました。私のセルには、 "UITableViewCellAccessoryDisclosureIndicator"があります。セルをハイライト表示すると青色になり、付属品が白くなります。だからそれはすべて良いです。cell.accessoryType消える問題

ただし、タップして新しいビューを押すと、付属品が消えます。私がテーブルビューに戻ると、UITableViewCellAccessoryDisclosureIndicatorは消えてしまい、同じセルの指をタップ/押さえても再び強調表示されません。

先週はうまくいきましたが、突然この問題の原因を突き止めることはできません。私は「hg diff」をすると何も見ることができないので、誰かが私を可能な解決策に導いてくれることを願っていました。特定のコードが必要な場合は、私に知らせてください。

私はatebits Fast Scrollingのサンプルコードを使用し、それを使って多くのカスタマイズを行いましたが、基本(および強調表示されたBOOL)は同じままです。

PS。私のコードでは、新しいビューが押されたときにUITableViewCellが強調表示されないことにも気付きました。私はAppleの独自のサンプルコード、新しいビューが押されたときにセルが強調表示されていることに気付きました。そして、テーブルビューに戻ると、テーブルビューが完全に押し戻されるまでセルが強調表示されたままになります。ここにどんなアイデア?どうも。

答えて

0

あなたが参照しているのはFast Scrollingコードではわかりませんが、次のコントローラがポップされた直後にのみ、View Controllerのプッシュ/ポップアップでハイライト表示されたままになります。換言すれば、イベントのシーケンスは次のようになります

  1. は、テーブルビューセル上のタッチイベントを受信
  2. セル選択(青のハイライト)
  3. プッシュ新しいコントローラ
  4. 任意のアクション(複数可)新しいコントローラ
  5. に新しいコントローラ
  6. セル選択解除(青から白へのフェード)
ポップ

これが起こっていない場合は、UITableViewメソッドdeselectRowAtIndexPath:animated:を呼び出している可能性があります。これは、プログラムによってテーブルビューでセルの選択を解除するメソッドです。コード内にそのメソッドへの余分な呼び出しがないことを確認してください。

開示指標を失うことについては、ビューコントローラのプッシュまたはポップ時にテーブルビューのデータソースが変更されていないことを確認してください。生成されたセルにUITableViewCellAccessoryDisclosureIndicatorが含まれていない別のオブジェクトにデータソースが変更された場合、そのセルが強調表示されていても、ビューをプッシュ/ポップしてテーブルを更新すると表示されません。 (これは、その後[tableView reloadData]を呼び出し、自分のアクセサリーインジケーターが消えるかどうかを確認し、しばらく待ってから、テーブルを表示するために、診断的に有益であり得る。)

+0

Iを添加: - (ボイド)viewWillAppear:(BOOL){ NSIndexPath * selectedRowIndexPath = [self.tableView indexPathForSelectedRow]アニメーション。 if(selectedRowIndexPath!= nil){ [self.tableView deselectRowAtIndexPath:selectedRowIndexPath animated:YES]; } } DisclosureIndicatorはやや良いです。セルが選択解除されたとき、またはテーブルビューが押されたときに戻ります。 ただし、新しいビューがプッシュされると、その行は選択解除されます。私は "どの細胞が訪問されたか"の効果を得て、細胞が強調表示されるようにしたいと思います。また、ビューがプッシュされると、アニメーション中も公開アイテムが消えます。( – runmad

+0

deselectRowAtIndexPath:animated:を呼び出す必要があるかどうかはわかりませんが、もしそうでなければ、あなたのアプリから関連するコードを見ることができますか? – Tim

1

私は(このAM)自分のためにこの問題を解決し

は試してみてください、のために議論のために、あなたのセルからLayoutSubviewsメソッドを削除してください。私はアクセサリーの意見に大混乱を招くことがわかった。私は自分のセルからそのメソッドを削除し、要素を初期化メソッドに配置してしまいました。

+0

私のコードにLayoutSubviewsメソッドがありません:/ / – runmad

0

あなたが "layoutSubviews" をオーバーライドする場合は、カスタムレイアウトのものの前に

[super layoutSubviews]; 

を呼び出す必要があります。

関連する問題