2013-01-16 274 views
0

我有一个自定义UITableViewCell分类为ItemDetailCell其中有许多出口连接到我的故事板文件。其中有一个自定义UIView分类为PriorityView,它在nib文件中有一个出口到UIView(priorityStatusView)。自定义UIView自定义UITableViewCell

@property (weak, nonatomic) IBOutlet PriorityView *redPriorityView; 

在nib文件(PriorityView.xib)中,我已将文件所有者自定义类连接到PriorityView。在PriorityView.m我使用加载在drawRect笔尖文件:

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"PriorityView" owner:self options:nil]; 
[self addSubview:[array objectAtIndex:0]]; 

在我的表视图控制器的cellForRowAtIndexPath我想设置的redPriorityView.priorityStatusView背景颜色,但首先我打电话drawRect使笔尖加载。我没有使用initWithFrame加载笔尖的原因是,除了不加载笔尖之外,它似乎使PriorityView无效。我的怀疑是这样的,因为视图已经加载了IBOutlet。我知道它是空的,因为我呼吁:

NSLog(@"%@, %@", detailCell.redPriorityView, detailCell.redPriorityView.priorityStatusView); 

并且都返回null。但是,使用drawRect加载该笔尖会将两个日志都返回为非空。我现在我遇到的唯一问题是,背景颜色不会改变使用:

detailCell.redPriorityView.priorityStatusView.backgroundColor = [UIColor yellowColor]; 

我也用setBackgroundColor无济于事尝试。实际上,redPriorityViewredPriorityView.priorityStatusView的属性似乎都没有改变。背景颜色只是一个例子。

对不起,我只是很难做出这项工作。预先感谢任何帮助!

编辑

我曾尝试在ItemDetailCell使用方法设置redPriorityView的属性,并通过调用cellForRowAtIndexPath,但即使在该方法中NSLog被称为属性不会改变。我认为问题可能在于如何将视图连接到PriorityView文件。

+0

很难确切地告诉你在这里做什么,但是使用drawRect不是一条可行的路。对于从笔尖出来的东西,你想使用initWithCoder而不是initWithFrame。一个更基本的问题是,为什么你要为priorityStatusView使用单独的nib文件,而不是在你的ItemDetailCell中首先创建它? – rdelmar

+0

@rdelmar我在detailCell中使用了三次视图。当最终它将有一个子视图和点击手势识别器,所以我认为如果我将其分类,就会更容易控制'UIView'的所有功能。 –

+0

@rdelmar此外,无法将手势识别器添加到原型单元格。所以使用自定义视图似乎是我唯一的选择。 –

回答

0

执行- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath方法,并尝试设置背景颜色。希望这可以帮助!

+0

为什么使用这个而不是'cellForRowAtIndexPath'? –

+0

我刚刚尝试过使用它,但不幸的是它没有任何区别。 –

+0

“表视图在它使用单元格绘制一行之前将其发送给其委托,从而允许委托在显示之前自定义单元对象。此方法使委托有机会覆盖先前设置的基于状态的属性由表格视图,如选择和背景颜色。“ – Levi

0

尝试设置您的访问器强。也许...