我一直在使用ABTableViewCell创建快速滚动单元格。除了我不知道如何将UIButton添加到我的自定义单元格,所有工作都很好。ABTableViewCell - 添加UIButton
使用ABTableViewCell时,使用drawAtPoint或drawInRect自己完成文本/图像的所有绘制。但是UIButton不支持任何这些方法。您不能使用addSubView作为使用ABTableViewCell的全部要点,因为您只有一个视图。
任何人有任何想法如何做到这一点?
谢谢
我一直在使用ABTableViewCell创建快速滚动单元格。除了我不知道如何将UIButton添加到我的自定义单元格,所有工作都很好。ABTableViewCell - 添加UIButton
使用ABTableViewCell时,使用drawAtPoint或drawInRect自己完成文本/图像的所有绘制。但是UIButton不支持任何这些方法。您不能使用addSubView作为使用ABTableViewCell的全部要点,因为您只有一个视图。
任何人有任何想法如何做到这一点?
谢谢
我在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];
}
使它的一个子类应该工作。请执行以下操作:
当定义单元格,这样做:
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;
}
这大致如何它应该做的事:]
UITableViewCell
是UIResponder
子类,所以你总是可以考虑在小区边界的一个特定区域手动操作触摸,而无需使用一个子视图(平面视图是快速的关键ABTableViewCell
途径之一滚动)。
然后,您可以设置您自己的委托或目标/操作机制,让您的单元通知应用程序的其他区域有关交互,或者仅以不同方式绘制单元格的按钮区域。
此外,如果重写UIResponder
方法和不处理的投入,一定要打电话super
所以UITableView
会认可行选择等
一种可以替代的罗兰Brichter的ABTableViewCell被设置-shouldRasterize:
标志上的UITableViewCell的支持CALayer到YES
。 -shouldRasterize:
会将您的手机画面关闭并缓存。如果你的细胞一般非常简单和同质,这是一个很好的方法。要访问这些图层属性,请记住,您必须链接到QuartzCore框架。
请记住,如果您在单元格中进行动画制作,此方法通常不会给您相同的结果,因为-shouldRasterize:
将尝试为动画的每个帧绘制和缓存。
谢谢,我不知道该设置,我会试试看。比检测自己触摸要容易得多,因为我是我正在走下的路线。虽然如果是栅格化图层,它是否仍然响应按钮事件? – Toby 2011-02-03 08:49:22
它的工作原理完全相同,除了手动呈现该单元格的最终合成视图。我还应该指出,它仅适用于iOS 3.2+。 – 2011-02-03 18:35:23