2011-02-01 2 views
2

Я использую ABTableViewCell для создания быстрых прокручиваемых ячеек. Все отлично работает, поскольку я не могу понять, как добавить UIButton в свою собственную ячейку.ABTableViewCell - Добавление UIButton

При использовании ABTableViewCell вы сами рисуете текст/изображения, используя drawAtPoint или drawInRect. Однако UIButton не поддерживает ни один из этих методов. Вы не можете делать addSubView, поскольку весь смысл использования ABTableViewCell заключается в том, что у вас есть только один вид.

У кого-нибудь есть идеи, как это сделать?

Thanks

ответ

5

У меня есть кнопка «share» внутри подкатегории 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]; 
    } 

Handle прикосновение:

-(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:

#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

UITableViewCell является подклассом UIResponder, так что вы всегда могли бы рассмотреть возможность обработки прикосновений вручную в конкретной области границ в клеточных без использования подвида (плоский вид является одним из ключевых ABTableViewCell подходов для быстрого прокрутка).

Затем вы можете настроить свою собственную делегацию или механизм цели/действия, чтобы ваша ячейка информировала другие области приложения о взаимодействии или просто нарисовала область кнопки ячейки по-разному.

Кроме того, если вы переопределить UIResponder метод и не обрабатываете вход, не забудьте вызвать super так UITableView будет признан выбором строки и т.д.

1

Одна альтернатива ABTableViewCell Лорена Brichter является установка -shouldRasterize: флага на UITableViewCell-х поддерживающий CALayer до YES. -shouldRasterize: будет рисовать вашу ячейку вне экрана и кэшировать ее. Это хороший подход, если ваши камеры, как правило, довольно простые и однородные. Чтобы получить доступ к этим свойствам слоя, помните, что вам нужно будет связать себя с каркасом QuartzCore.

Имейте в виду, что этот подход, как правило, не даст вам одинаковых результатов, если вы оживляете свою ячейку, поскольку -shouldRasterize: попытается нарисовать и кешировать каждый кадр анимации.

+0

Спасибо, я не знал об этой настройке я дам ему попробовать. Намного легче, чем обнаруживать, что касается меня, что я был тем маршрутом, с которого я спускался. Хотя, если он растеризует слой, он все равно будет реагировать на события кнопок? – Toby

+0

Он работает точно так же, за исключением того, что окончательный композитный вид для этой ячейки отображается перед операцией. Следует также отметить, что он доступен только на iOS 3.2+. –

+0

Я использовал его, используя этот метод. К сожалению, производительность не была такой гладкой, как при использовании ABTableViewCell. Возможно, это связано с тем, что у меня есть фоновое изображение и несколько UILabels с прозрачным фоном. – Toby

Смежные вопросы