2011-02-01 48 views
2

我一直在使用ABTableViewCell创建快速滚动单元格。除了我不知道如何将UIButton添加到我的自定义单元格,所有工作都很好。ABTableViewCell - 添加UIButton

使用ABTableViewCell时,使用drawAtPoint或drawInRect自己完成文本/图像的所有绘制。但是UIButton不支持任何这些方法。您不能使用addSubView作为使用ABTableViewCell的全部要点,因为您只有一个视图。

任何人有任何想法如何做到这一点?

谢谢

回答

5

我在ABTableViewCell sublcass里有一个“share”按钮。

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

使它的一个子类应该工作。请执行以下操作:

当定义单元格,这样做:

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

MyFunkyCellClass.h:

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

在MyFunkyCellClass.h:

@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; 
} 

这大致如何它应该做的事:]

0

UITableViewCellUIResponder子类,所以你总是可以考虑在小区边界的一个特定区域手动操作触摸,而无需使用一个子视图(平面视图是快速的关键ABTableViewCell途径之一滚动)。

然后,您可以设置您自己的委托或目标/操作机制,让您的单元通知应用程序的其他区域有关交互,或者仅以不同方式绘制单元格的按钮区域。

此外,如果重写UIResponder方法和不处理的投入,一定要打电话super所以UITableView会认可行选择等

1

一种可以替代的罗兰Brichter的ABTableViewCell被设置-shouldRasterize:标志上的UITableViewCell的支持CALayer到YES-shouldRasterize:会将您的手机画面关闭并缓存。如果你的细胞一般非常简单和同质,这是一个很好的方法。要访问这些图层属性,请记住,您必须链接到QuartzCore框架。

请记住,如果您在单元格中进行动画制作,此方法通常不会给您相同的结果,因为-shouldRasterize:将尝试为动画的每个帧绘制和缓存。

+0

谢谢,我不知道该设置,我会试试看。比检测自己触摸要容易得多,因为我是我正在走下的路线。虽然如果是栅格化图层,它是否仍然响应按钮事件? – Toby 2011-02-03 08:49:22

+0

它的工作原理完全相同,除了手动呈现该单元格的最终合成视图。我还应该指出,它仅适用于iOS 3.2+。 – 2011-02-03 18:35:23