Как отобразить подкласс UIControl на экране - PullRequest
2 голосов
/ 06 июня 2011

Я создал подкласс UIControl, называемый ToggleImageControl, с помощью следующего кода (со ссылкой на следующий пост Переключение изображения флажка в UITableViewCell )

@interface ToggleImageControl : UIControl 
{
    BOOL photoIsStarred;
    UIImageView *imageView;
    UIImage *normalImage;
    UIImage *selectedImage;
}

@property (nonatomic, assign) BOOL photoIsStarred;
@property (nonatomic, retain) UIImageView *imageView;
@property (nonatomic, retain) UIImage *normalImage;
@property (nonatomic, retain) UIImage *selectedImage;

- (void) toggleImage;
@end


@implementation ToggleImageControl

@synthesize photoIsStarred, imageView, normalImage,selectedImage;

- (id)initWithFrame:(CGRect)frame 
{
    NSLog(@"in inti with frame method");
    self.normalImage = [UIImage imageNamed: @"blank_star.png"];
    self.selectedImage = [UIImage imageNamed: @"star.png"];
    self.imageView = [[UIImageView alloc] initWithImage: normalImage];

    // set imageView frame
    [self addSubview: imageView];

    [self addTarget: self action: @selector(toggleImage) forControlEvents: UIControlEventTouchDown];

return self;
}

- (void) toggleImage
{
    NSLog(@"image toggled");
    self.photoIsStarred = !photoIsStarred;
    self.imageView.image = (photoIsStarred ? selectedImage : normalImage); 
}

@end

Я пытался создать экземплярToggleImageControl в ячейке таблицы, но не смог отобразить «нормальное изображение».Чего-то не хватает в моей реализации ниже?

//In a UItableview cell
ToggleImageControl *toggleControl = [[ToggleImageControl alloc]initWithFrame:CGRectMake(670, 10,80, 80)];

[cell.contentView addSubview:toggleControl];

1 Ответ

5 голосов
/ 06 июня 2011

Обязательно вызовите [super initWithFrame:frame] в вашем initWithFrame: методе.

e.x.

self = [super initWithFrame:frame];
if (self) {

  // Initialization

}

return self;
...