ABTableViewCell - 添加UIButton

时间:2011-02-01 09:22:16

标签: iphone objective-c uitableview uibutton

我一直在使用ABTableViewCell来创建快速滚动单元格。一切都很好,除了我无法弄清楚如何将UIButton添加到我的自定义单元格。

使用ABTableViewCell时,您可以使用drawAtPoint或drawInRect自行绘制所有文本/图像。但是,UIButton不支持任何这些方法。你无法做addSubView,因为使用ABTableViewCell只是你只有一个视图。

任何人都知道如何做到这一点?

由于

4 个答案:

答案 0 :(得分:5)

我在ABTableViewCell sublcass中有一个“共享”按钮。

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

答案 1 :(得分:1)

Loren Brichter的ABTableViewCell的一个替代方案是将UITableViewCell的支持CALayer上的-shouldRasterize:标志设置为YES-shouldRasterize:将在屏幕外绘制您的单元格并将其缓存。如果您的细胞通常非常简单和同质,这是一个很好的方法。要访问这些图层属性,请记住您必须链接到QuartzCore框架。

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

答案 2 :(得分: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;
}

这大致是应该如何完成的:]

答案 3 :(得分:0)

UITableViewCellUIResponder的子类,因此您可以始终考虑在单元格范围的特定区域中手动处理触摸而不使用子视图(平面视图是关键字{{1}之一用于快速滚动的方法。

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

此外,如果您覆盖ABTableViewCell方法但未处理输入,请务必致电UIResponder,以便super识别行选择等。