好的。我做了比我过去三年可能计算的更多自定义UITableViewCells。
然后是iOS 5,我在我的桌面上有一个项目,我还需要做更多的事情。
所以我以前的方式是做一个自定义的XIB,将UITableViewCell拖到画布上,插入我的控件,设置自定义类,做我的链接......然后在代码中加载实例化单元格解压缩XIB后循环遍历对象。
我有多次使用一个分类功能来处理整个事情。
现在,在iOS 5中突然间,每当我制作一个自定义单元时,它就会提供大的空白表格单元格。
以下是插入表格的自定义单元格的以下特征
1)除了“默认”UITableViewCell控件(textLabel等,将在我设置文本时填充和显示)时显示完全鲜明的白色。
2)isKindOfClass(MyCustomCellClass)报告为真
3)自定义单元类上的setter方法正常运行,设置值和自定义UILabel的对象指针等都报告为非零,这意味着单元格实际上正在制作并正确地从XIB实例化
4)出于某种原因,无条件地显示UIStepper等非同类控件。所以是的,如果我在自定义单元格中放置一个步进器,它会显示,但标签和图像不会。
我可以想象,默认情况下某些东西会遮挡内容视图,否则我正在创建的自定义控件不再适用于单元格的contentView(就像过去一样),而只是被扔进外太空。
例如,在iOS 4 XIB中,我曾经在制作自定义单元格时看到这一点(从Apple的iOS 5文档中拉出来):
但是到目前为止,这是我在iOS 5 XIB中做同样的事情时所看到的。
请注意,它没有明确显示内容视图的小点线。
我对这个问题的所有诊断知识都已经筋疲力尽了。我已经尝试在运行时手动将所有自定义标签直接泵入内容视图,但即使这样也行不通。
我正在寻找任何想法。
修改的
加载XIB的代码
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"XCCodeViewCell" owner:self options:nil];
cell = codeCell;
self.codeCell = nil;
}
这是基于Apple的新推出的iOS 5建议后的简化版本。 XIB的所有者正确地设置为“self”类,并且codeCell正确地链接到单元格,具有正确的类和标识符。
答案 0 :(得分:24)
在界面构建器中使用Xcode4,他们添加了在界面构建器中静态设置tableViewCells的功能。当您想要设计不会更改的tableView并且您不想在代码中编写它们时,这很酷。为了方便这一点,他们设置了在IB中设置tableViewCell样式的功能,并查看它的外观。当您使用自己的子视图设计自己的单元格时,请选择“自定义”。
随着iOS 5的发展,我发现了以下内容:当我从xib加载一个单元格,然后以编程方式设置textLabel.text或其中一个标准单元格样式的其他属性时,似乎tableViewCell生成带有默认标签的标准视图,并用它覆盖您的自定义视图。因此,要保留自定义单元格子视图,您无需访问任何标准tableCell属性。
冷却。
iOS 4中的新功能还有UINib
。您应该使用UINib
从xibs加载tableViewCells,因为它具有缓存并且速度更快(对于tableView滚动更好)。 ARC代码如下所示:
头:
@property (nonatomic, strong) UINib * tableCellLoader;
.m文件:
-(void)viewDidLoad{
[super viewDidLoad];
self.tableCellLoader = [UINib nibWithNibName:@"MyTableViewCell" bundle:nil];
}
然后在tableView:cellForRowAtIndexPath:
...
if (cell == nil) {
cell = [[self.tableCellLoader instantiateWithOwner:self options:nil] objectAtIndex:0];
}
...
编辑:更新iOS 5中的新功能
iOS 5中的新功能是UITableView
能够为某些单元重用标识符保留xib,然后如果重用队列中没有任何标识符,则实例化该特定类型的新单元。
结帐
– registerNib:forCellReuseIdentifier:
然后当你做
– dequeueReusableCellWithIdentifier:
您可以保证获得指定类型的UITableViewCell
。它可以帮助您自己完成UINib
整个事情。