gpt4 book ai didi

iphone - 试图用额外的选项覆盖 initWithFrame

转载 作者:行者123 更新时间:2023-12-01 16:55:35 25 4
gpt4 key购买 nike

我正在尝试使用不同类型的主题更新 UITableViewCell View 。
我有几个主题,但无法让它们正常工作。

@interface CustomRowBackground : UIView {
CGColorRef topStroke;
CGColorRef lightColor;
CGColorRef darkColor;
CGColorRef bottomStroke; //also known as separator
CGColorRef borderColor;
}

- (id)initWithFrame:(CGRect)frame topStroke:(CGColorRef)top lightColor:(CGColorRef)light darkColor:(CGColorRef)dark bottomStroke:(CGColorRef)bottom borderColor:(CGColorRef)border;
@end

- (id)initWithFrame:(CGRect)frame topStroke:(CGColorRef)top lightColor:(CGColorRef)light darkColor:(CGColorRef)dark bottomStroke:(CGColorRef)bottom borderColor:(CGColorRef)border
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
topStroke = top;
lightColor = light;
darkColor = dark;
bottomStroke = bottom;
borderColor = border;



}
return self;
}

现在在我的 UIViewController, .h 文件中,我使用辅助方法扩展了 UIColor 类
@interface UIColor (BIExtras)
+(UIColor *)colorWithR:(CGFloat)red G:(CGFloat)green B:(CGFloat)blue A:(CGFloat)alpha;
@end

然后在 .m 我写这个
@implementation UIColor (BIExtras)
+(UIColor *)colorWithR:(CGFloat)red G:(CGFloat)green B:(CGFloat)blue A:(CGFloat)alpha {
return [UIColor colorWithRed:(red/255.0) green:(green/255.0) blue:(blue/255.0) alpha:alpha];
}
@end

然后我尝试为特定行设置所需的渐变。
TaskDisplayCell *cell = (TaskDisplayCell *)[self.tableView dequeueReusableCellWithIdentifier:TaskCellIdentifier];
if (indexPath.row == 0) {
cell.backgroundView = [[CustomRowBackground alloc] initWithFrame:CGRectMake(0,0,self.tableView.bounds.size.width,40)
topStroke:[UIColor colorWithR:119 G:119 B:119 A:1].CGColor
lightColor:[UIColor colorWithR:92 G:92 B:92 A:1].CGColor
darkColor:[UIColor colorWithR:70 G:70 B:70 A:1].CGColor
bottomStroke:[UIColor colorWithR:76 G:76 B:76 A:1].CGColor
borderColor:[UIColor colorWithR:110 G:110 B:110 A:1].CGColor];
}

注意:我不确定这是否是这样做的方法。我只想用不同的渐变主题初始化背景。

无论如何,它给了我一个错误。如果我在 drawRect 中手动编写一个 [UIColor colorWith] 方法的分配,那就可以了。如果我改为允许代码重用,它就会崩溃。

有任何想法吗?

最佳答案

我在您的程序中看到的一个问题是您没有对 CGColorRef 执行内存管理。 s -- ARC(假设您已启用它)不会为您管理非 ObjC 对象。您必须手动保留和释放这些。因此在 ARC 和 MRC 中,您必须手动保留和释放它们。

这是基本形式:

@interface CustomRowBackground : UIView {
CGColorRef color;
}

- (id)initWithFrame:(CGRect)frame color:(CGColorRef)pColor;

@end

- (id)initWithFrame:(CGRect)frame color:(CGColorRef)pColor
{
self = [super initWithFrame:frame];
if (self) {
color = CGColorRetain(pColor);
}
return self;
}

- (void)dealloc
{
CGColorRelease(color), color = 0;
// [super dealloc]; if MRC
}

- (CGColorRef)color
{
return color;
}

- (void)setColor:(CGColorRef)p
{
if (color == p) {
return;
}
CGColorRef prev = color;
color = CGColorRetain(p);
CGColorRelease(prev);
}

关于iphone - 试图用额外的选项覆盖 initWithFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12123449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com