如何在屏幕上显示 UIControl 的子类

Posted

技术标签:

【中文标题】如何在屏幕上显示 UIControl 的子类【英文标题】:How to display a Subclass of UIControl on the screen 【发布时间】:2011-06-06 02:18:34 【问题描述】:

我通过以下代码创建了一个名为 ToggleImageControl 的 UIControl 子类(参考以下帖子Checkbox image toggle in 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】:

确保在您的initWithFrame: 方法中调用[super initWithFrame:frame]

例如

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

  // Initialization



return self;

【讨论】:

以上是关于如何在屏幕上显示 UIControl 的子类的主要内容,如果未能解决你的问题,请参考以下文章

数据更改时如何对 UIControl 调整大小做出反应

目标 C:标签文本(UIControl 的子类)未显示在 UITableview 中

突出显示 UIControl 子类

突出显示时如何更改 UIControl 的大小?

如何使 UIControl 在 XCUITest 中显示为按钮?

UIControl 跟踪在不同 UIControl 上开始的触摸