2012-10-04 32 views
3

在我的tableview中,我需要一堆(5-6种)不同的单元格。所有项目都具有相同的视觉布局,但内容明智(标签名称,图片和颜色),它们有很大不同。自定义UITableViewCell with reuseIdentifier without Style?

所以我有一个CustomUITableViewCell基类,在Interface Builder中用这个通用设计来设计。这个CustomUITableViewCell类服务器作为一组单元子类的基类。 我使用工厂模式从工厂类的类方法生成这些子类。 这些子类没有xibs。他们为什么会有共同的设计。

现在的问题是,对于每个子类,我需要一个不同的重用标识符。因此,人们会认为让我们覆盖每个子类的默认初始化程序,并在其中调用另一个初始化程序initWithStyle:reuseIdentifier:

问题是它需要风格来指定。它抱怨说,我不能把nil放在那里。但我不需要苹果公司的任何款式,我明显拥有自己的风格,如果我想有一种库存风格,为什么要进行定制设计?我只需要指定reuseIdentifier。

如何分配重用标识符,如果它是只读属性,它似乎唯一的方式来提供它是通过初始化?

回答

9

前段时间我有类似的问题。我的解决办法是重新申报reuseIdentifier作为读写实现文件属性(在UITableViewCell子类)

@interface MyCustomCell() 
@property(nonatomic, readwrite, copy) NSString *reuseIdentifier; 
@end 

,并用不同实例变量合成属性:

@implementation MyCustomCell 
@synthesize reuseIdentifier = _myCustomCellReuseIdentifier; 

现在您可以在自定义单元的init方法中分配self.reuseIdentifier

至少它曾在我的情况下,也许你可以使用它...

+0

我设法重写财产(一绝招BTW。:)),但由于某些原因,队列不返回在cellForRow中第二次和后续的时间。即使cellIdentifier确实匹配...它总是在if循环中去创建一个新的。 AFAIK,我不应该在意让细胞排队,我应该吗?它在第一次数据源调用后默认到达,是吗? –

+0

@Earl:我不确定是否正确理解了你最后的评论,但单元格只在你滚动时重用。如果一个单元不再需要,因为该行不再可见,那么这个单元将被重新用于不同的行。 –

+0

是的,我不知道。所以它的工作原理,我试图滚动,它出列。谢谢。 –