2012-02-04 10 views
0

私はUITableViewCellのサブクラスを持っています。私はwhiteLineサブビューのアルファを調整しようとしていますが、アルファはオフスクリーンセルにスクロールすると有効になります。 whiteLineサブビューの最初のバッチは1.0のアルファで表示されます。ここでIUTableViewCellサブクラスのアルファ設定サブビュー

は、私は、テーブルセルの設定方法は次のとおりです。

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

    BaseCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[BaseCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    // Configure the cell... 
    [cell rowIsOdd:(indexPath.row%2 ? NO : YES)]; 

    return cell; 
} 

そして、ここでは、私がwhiteLineを設定し、表のセルのサブクラス内のアルファを変更しています方法は次のとおりです。

- (void)drawRect:(CGRect)rect 
{ 
    self.whiteLine = [[UIView alloc] initWithFrame:CGRectMake(0.0, self.frame.size.height-1.0, self.frame.size.width, 1.0)]; 
    self.whiteLine.backgroundColor = [UIColor whiteColor]; 
    [self addSubview:self.whiteLine]; 
} 

- (void)rowIsOdd:(BOOL)isOdd 
{ 
    self.whiteLine.alpha = (isOdd ? 0.7 : 0.3); 
} 

問題があることでした私はプロパティを使用していますか? ではなく、のプロパティを使用することは決してありません。これは間違いなく、このクラスの外部からアクセス可能なプロパティではありません。

答えて

0

私はそれを理解しました。 drawRectではなく、awakeFromNibのビューをセットアップする必要がありました。

0

おそらく、あなたのwhiteLineサブビュー初期化をinitWithStyle:reusedIdentifier:に移動したいと思うかもしれません。現在は、インスタンス化される前にアルファを設定しています。また、drawRect:が呼び出されるたびに新しいビューを作成しています。これは確かにno-noです。

私は、コンパイラでは現在ないんだけど、このような何かはあなたの問題を解決する必要があります。

注意私も(私はそれが保持財産であると仮定)あなたのWHITELINEのサブビューに自動解放の呼び出しを追加したこと。 Cocoa Memory Managementに慣れていない場合は、ARCの使用を検討してください。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)identifier { 
    self = [super initWithStyle:style reuseIdentifier:identifier]; 
    if (self) { 
     self.whiteLine = [[[UIView alloc] initWithFrame:CGRectMake(0.0, self.frame.size.height-1.0, self.frame.size.width, 1.0)] autorelease]; 
     self.whiteLine.backgroundColor = [UIColor whiteColor]; 
     [self addSubview:self.whiteLine]; 
    } 
    return self; 
} 

- (void)dealloc { 
    self.whiteLine = nil; 
    [super dealloc]; 
} 

- (void)rowIsOdd:(BOOL)isOdd 
{ 
    self.whiteLine.alpha = (isOdd ? 0.7 : 0.3); 
} 
:そうでなければ私は再読み込み Apple's Memory Managementガイド、おそらく優れたBaseCell.mで Google Objective-C Code Style Guide

を提案します

関連する問題