1

UITableViewControllerで、いくつかのセルがaccessoryViewによって強調表示されているUITableViewCellsをインスタンス化しています。私にとって、これは機能します:

// works for me
UIImageView *favoriteImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
[cell setAccessoryView:favoriteImageView];

複数のセルに対して同じビューを繰り返しインスタンス化するのは無駄に思えます。ただし、複数のセルのaccessoryViewと同じビューを再利用しようとすると、アプリが悲惨な方法で失敗します(完全に黒い画面、ビューが表示されない)デバッグできませんでした。のようなメソッド内でfavoriteImageViewを静的として宣言するかどうか

// doesn't work for me
static UIImageView *favoriteImageView = nil;        
if (!favoriteImageView) 
    favoriteImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];

[cell setAccessoryView:favoriteImageView];

または、それをivarとして宣言し、initで定義して、次のようにします。

// doesn't work for me
[cell setAccessoryView:[self favoriteImageView]];

これらの2つの機能しないケースでは、1つのセルにaccessoryViewが設定されていると、正しく表示されます。アクセサリビューが同じビューを参照するように設定されるように2番目の行をマークするとすぐに、すべてがハングアップします。

同じUIViewが複数のUITableViewCellのaccessoryViewとして参照されるように、UIViewを構築したり、UITableViewCellを構成したりするための要件は何ですか?

4

1 に答える 1

1

UIImageView は UIView を継承しています。また、UIView を同時に 2 つ以上の場所に配置することはできません。そのため、2 つ以上のセルで同時に UIImageView を表示しようとすると、機能しません。画面上のセルごとに UIImageView が必要です。

セルごとに UIImageView を作成することをお勧めします。テーブルビュー セルはアクセサリ ビューと一緒に再利用されるため、パフォーマンスやメモリの問題についてあまり心配する必要はありません。

于 2012-06-02T07:27:52.263 に答える