我在子类UIButton
中有一个子类UITableViewCell
。该按钮是从笔尖加载的。
我想要用作按钮图像的图像。我想使用CALayer
来更好地控制动画。当用户点击按钮时,将发生动画。但是,我甚至无法让图像显示出来。
导入QuartzCore。
我的子类UIButton
的代码(总是从笔尖加载):
-(void)awakeFromNib {
[super awakeFromNib];
self.clipsToBounds = NO;
self.backgroundColor = [UIColor clearColor];
self.opaque = NO;
self.userInteractionEnabled = YES;
}
表视图控制器中的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCustomCell *cell = (BLCustomCellCenter*)[tableView dequeueReusableCellWithIdentifier:@"customCellID"];
if (cell == nil) {
// ... cell is initialized
}
// configure the image for the button
//
// Note: there is an outlet to the UIButton called 'customButton'
CALayer *imgLayer = [CALayer layer];
imgLayer.bounds = CGRectMake(0, 0, cell.customButton.bounds.size.width, cell.customButton.bounds.size.height);
imgLayer.position = CGPointMake(cell.customButton.bounds.size.width/2, cell.customButton.bounds.size.height/2);
UIImage *img = [UIImage imageNamed:@"someImage"];
imgLayer.contents = (id)[img CGImage];
[cell.customButton.layer addSublayer:imgLayer];
// ... configure subviews of 'customButton'
return cell;
}
任何帮助都非常感激,一如既往。
答案 0 :(得分:1)
经过数小时的调试后想出来了。事情(也许我忘了提到)是自定义UITableViewCell
是从笔尖加载的。我想查看的子视图也是从笔尖加载的。所以,它是一个笔尖内的笔尖。
Per this wonderful article,在子视图的类中覆盖awakeAfterUsingCoder:
就可以了。加载父笔尖时,在子视图上调用超级initUsingCoder:
,子视图只加载占位符对象。
这个'占位符'对象导致了我的问题,因为我正在操纵占位符而不是我想要的实际对象。
因此,您必须从笔尖加载并初始化子视图的对象,并通过覆盖NSObject
的{{1}}来完成此操作。
答案 1 :(得分:0)
设置内容后尝试添加[imgLayer setNeedsDisplay];
。