ABTableViewCell - Добавление кнопки UIB - PullRequest
2 голосов
/ 01 февраля 2011

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

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

Кто-нибудь имел представление о том, как это сделать?

Спасибо

Ответы [ 4 ]

5 голосов
/ 09 февраля 2011

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

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

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

0 голосов
/ 01 февраля 2011

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

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

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

0 голосов
/ 01 февраля 2011

Сделать из него подкласс должен работать.Выполните следующие действия:

При определении ячейки сделайте следующее:

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

MyFunkyCellClass.h:

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

inMyFunkyCellClass.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;
}

Примерно так и должно быть:]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...