2012-04-15 5 views
2

私はUIAppearanceを使用して、自分のアプリケーションでテーブルセルの背景イメージを設定しました。iOS - UiTableviewCell - 一度に1つのセルにのみ表示される背景画像

[[UITableViewCell appearance] setBackgroundView:[ [UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"list_bg.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]]; 

ただし、リストを表示すると、背景画像は画面上のセルの1つにのみ設定されます。私が画面をスクロールすると、背景画像は表示されているセルに設定されますが、他の表示されているセルにはこのbg画像が設定されません。

誰でも何が起こっているのかわかりますか?私はUITableviewCellのUIAppearanceを設定することで、このタイプのすべてのインスタンスが自動的に背景イメージを取得すると考えました。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"plantCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    [[NSBundle mainBundle] loadNibNamed:@"PlantListCell" owner:self options:nil]; 
    cell = _plantCell; 
    self.plantCell = nil; 
} 


Plant *plant = [self.fetchedResultsController objectAtIndexPath:indexPath]; 

UIImageView *thumbnail = (UIImageView *)[cell viewWithTag:1]; 
thumbnail.image = [UIImage imageNamed:[plant.name stringByAppendingString:@"_S"]]; 

UILabel *label = (UILabel *)[cell viewWithTag:2]; 
label.text = plant.name; 

UIImageView *set = (UIImageView *)[cell viewWithTag:3]; 
set.image = [UIImage imageNamed:@"set"]; 

UIImageView *favourite = (UIImageView *)[cell viewWithTag:4]; 
favourite.image = [UIImage imageNamed:@"fav"]; 

return cell; 
} 

答えて

5

うん:

おかげ

ブライアン

は、ここに私のcellForRowAtIndexPathメソッドです。この問題は、UITableViewCellクラスに、各テーブルビューのセルの背景ビューに対して1つのUIImageViewを設定するように指示していることです。一度セットされると、以前のスーパービューから削除され、新しいUITableViewCellに追加されます。各tableViewCellに重複したUIImageViewsが設定されていません。すべてのテーブルビューセルに1つのビューが設定されています。

それで、それぞれのtableViewCellから設定され、最後に設定されたものまで設定解除されます。

このメソッドの外観プロキシを使用すると、UITableViewCellのすべてのオブジェクトに設定されます。

ビュービューメソッドを設定するために外観プロキシーを使用しません。ビューに渡すビューは1つのビューになるため、一度に1つのセルにしか適用できません。

各セルのビューを個別に作成するか、または初期化時にそれを設定するサブクラスを作成することをお勧めします。

+0

乾杯。大丈夫です。 UIAppearanceを使用するのではなく、直接BG BGイメージを設定するだけで解決しました。 1つか2つのテーブルのためのそれの罰金が、しかしあなたがたくさんある場合。私は許可を得た後、私のコードを8時間以内に回答に添付します。ブライアン –

+0

クール。正しい答えとしてこれをチェックしてください。 – thebarcodeproject

2

thebarcodeprojectに感謝します。なぜなら、本当にうまくいけば、アップルがUITableviewCellの背景イメージを設定するのを邪魔している理由はわかりません。 最後に、cellForRowAtIndexPathメソッドでイメージを設定するだけで簡単な解決策をとってきました。

cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"list_bg.png"]]; 

大丈夫ですが、テーブルがたくさんあり、一般的な方法で設定したい場合はうまくいきません。

乾杯

ブライアン

+0

完全に同意します。 – thebarcodeproject

1

IはCustomizableUITableCellと呼ばれる基本クラスを作成し、背景画像のUIの外観値を設定することによって、これを解決しました。その後、私はカスタムの背景と必要なセルを作成するたびに、シンプルなサブクラスCustomizableUITableCellを作成します。

//ヘッダー

#import <UIKit/UIKit.h> 

@interface CustomizableUITableCell : UITableViewCell <UIAppearance> 

@property (nonatomic, weak) UIColor *backgroundCellColor UI_APPEARANCE_SELECTOR; 

@end 

//実装

#import "CustomizableUITableCell.h" 

@implementation CustomizableUITableCell 

@synthesize backgroundCellColor; 

#pragma mark - Public Methods. 

-(void)setBackgroundCellColor:(UIColor *)backgroundColor 
{ 
    [super setBackgroundColor:backgroundColor]; 
} 

@end 

その後、外観プロキシを使用して設定することができます。それは私の作品

[[CustomizableUITableCell appearance] setBackgroundCellColor:[UIColor colorWithPatternImage:backgroundImage]]; 
+1

残念ながら、これはテーブルをスクロールする必要がない限り有効です。何らかの理由で[tableView dequeueReusableCellWithIdentifier:cellIdentifier]は、割り当て済みのセルを再利用すると、Storyboardで設定された値にすべてをリセットします。 – Martin

0

cell.backgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"1.jpg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];

..

関連する問題