2011-02-01 11 views
2

私はABTableViewCellを使って高速スクロールセルを作成しています。私はカスタムセルにUIButtonを追加する方法を理解できません。ABTableViewCell - UIButtonを追加する

ABTableViewCellを使用する場合は、drawAtPointまたはdrawInRectを使用して、テキスト/イメージのすべての描画を自分で行います。ただし、UIButtonはこれらのメソッドをサポートしていません。 ABTableViewCellを使用する全体のポイントは、1つのビューしか持たないため、addSubViewを実行することはできません。

誰でもこれを行う方法について考えていましたか?

ありがとうございます。

答えて

5

私はABTableViewCellサブクラスの中に「共有」ボタンを持っています。

static UIImage* imgShare=nil; 
    + (void)initialize 
    { 
     if(self == [MyCustomCell class]) 
     { 
      imgShare = [[UIImage imageNamed:@"share.png"] retain];  
     } 
    } 

ボタンのアクティブな領域をデビューするために黄色の矩形を使用します。drawRectコールバックで :

CGRect btnShareActiveAreaRect; 
    - (void)drawContentView:(CGRect)r 
    { 
     [[UIColor yellowColor] set]; 
     btnShareActiveAreaRect = CGRectMake(10,10,65,45); 
     CGContextFillRect(context, btnShareActiveAreaRect); 
     CGRect shareRect = CGRectMake(15,20,25,19); 
     [imgShare drawInRect:shareRect]; 
    } 

は、タッチハンドル:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch =[touches anyObject]; 
    CGPoint startPoint =[touch locationInView:self.contentView]; 
    if(CGRectContainsPoint(btnShareActiveAreaRect,startPoint)) 
    { 
     [self shareButton_Click]; 
    } 
    else 
     [super touchesBegan:touches withEvent:event]; 
} 
+0

ありがとう、これは私がやってしまったことです。ちょうどUIButtonを使用するよりもはるかに機能しますが、そのトリックを行います。 – Toby

+0

カスタムimgShareイメージが必要な場合はどうしますか?あなたはどこにイメージを設定しますか?ありがとう。 – user1832330

0

サブクラスで動作するようにしてください。次の操作を行います

セルを定義し、これを実行します。

MyFunkyCellClass *cell = (MyFunkyCellClass*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

MyFunkyCellClass.h:MyFunkyCellClass.hで

#import <UIKit/UIKit.h> 
@interface MyFunkyCellClass : UITableViewCell { 
    UIButton *fancyButton; 
} 
@property (nonatomic, retain) UIButton *fancyButton; 
@end 

@synthesize fancyButton; 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     fancyButton = [[UIButton alloc] initWithFrame:CGRectMake(113, 2, 113, 31)]; 
[self addSubview:fancyButton]; 
} 

    return self; 
} 

をこれはおおよそのそれが行われる必要があります:]あなたはいつも(フラットビューが速いため、キーABTableViewCellのアプローチの一つである使用せずにセルの境界の特定の領域に手動でサブビューをタッチを扱う検討することができるように

0

UITableViewCellは、UIResponderのサブクラスでありますスクロール)。

次に、独自の委任またはターゲット/アクションメカニズムを設定して、セルがアプリケーションの他の領域にインタラクションを通知したり、セルのボタン領域を別の方法で描画したりすることができます。また

、あなたはローレンBrichterのABTableViewCellに

1

1つの選択肢は、UITableViewCellのの上-shouldRasterize:フラグを設定しているなど、UIResponderメソッドをオーバーライドして、入力を処理しない、UITableViewは、行選択を認識しますので、superを呼び出してください場合CALayerをYESにバックアップします。 -shouldRasterize:はあなたのセルを画面外に引き出し、キャッシュします。あなたの細胞が一般的にかなりシンプルで均一であれば、これは良いアプローチです。これらのレイヤプロパティにアクセスするには、QuartzCoreフレームワークにリンクする必要があることに注意してください。

-shouldRasterize:がアニメーションのすべてのフレームに対して描画とキャッシュを試みるため、この方法ではセル内でアニメーションを作成する場合、通常は同じ結果が得られません。

+0

おかげで、私はそれを試してみるだろう、この設定については知りませんでした。私が行っていたルートだった自分自身に触れるよりもはるかに簡単です。レイヤーをラスタライズしても、ボタンイベントにはまだ応答しますか? – Toby

+0

これはまったく同じように機能しますが、そのセルの最終合成ビューは手前でレンダリングされます。また、iOS 3.2以降でのみ利用可能であることにも注意してください。 –

+0

私はこの方法を使って作業しています。残念ながら、パフォーマンスはABTableViewCellを使用するほど滑らかではありませんでした。私が背景画像を持っているという事実と、透明な背景を持つ少数のUILabelsがあるかもしれません。 – Toby

関連する問題