iOS 5 UITableViewCell自定义XIB又称"我是否会失去理智?"

M. *_*yan 12 iphone uitableview ios ios5

好的.我做了比我过去三年可能计算的更多自定义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文档中拉出):

来自Apple的iOS 5文档

但是到目前为止,这是我在iOS 5 XIB中做同样的事情

在此输入图像描述

请注意,它没有明确显示内容视图的小虚线.

我对这个问题的所有诊断知识都已经筋疲力尽了.我尝试在运行时手动将所有自定义标签直接泵入内容视图,但即使这样也行不通.

我正在寻找任何想法.

编辑

加载XIB的代码

if (cell == nil)
{
    [[NSBundle mainBundle] loadNibNamed:@"XCCodeViewCell" owner:self options:nil];
    cell = codeCell;
    self.codeCell = nil;
}
Run Code Online (Sandbox Code Playgroud)

这是目前基于Apple的新推出的iOS 5推荐简化它之后的情况.XIB的所有者正确地设置为"self"类,并且codeCell正确地链接到单元格,具有正确的类和标识符.

jac*_*ash 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;
Run Code Online (Sandbox Code Playgroud)

.m文件:

-(void)viewDidLoad{
    [super viewDidLoad];
    self.tableCellLoader = [UINib nibWithNibName:@"MyTableViewCell" bundle:nil];
}
Run Code Online (Sandbox Code Playgroud)

然后在tableView:cellForRowAtIndexPath中:

...
if (cell == nil) {
    cell = [[self.tableCellLoader instantiateWithOwner:self options:nil] objectAtIndex:0];
}
...
Run Code Online (Sandbox Code Playgroud)

编辑:更新iOS 5中的新功能iOS 5中的新功能是UITableView为某些单元重用标识符保留xib,然后在重用队列中没有任何实例化该特定类型的新单元.

查看

– registerNib:forCellReuseIdentifier:
Run Code Online (Sandbox Code Playgroud)

然后当你这样做

– dequeueReusableCellWithIdentifier:
Run Code Online (Sandbox Code Playgroud)

你可以保证得到一个UITableViewCell指定的类型.它可以帮助您自己完成整件事UINib.

  • 为UINib +1 - 奇怪的是,我们再也不会使用笔尖,只是xibs,为什么复古名称苹果? (2认同)