gpt4 book ai didi

iphone - iOS 5 UITableViewCell 自定义 XIB 又名 "Am I losing my mind?"

转载 作者:技术小花猫 更新时间:2023-10-29 10:32:48 35 4
gpt4 key购买 nike

好的。在过去三年中,我完成的自定义 UITableViewCells 多得我数都数不过来。

然后是 iOS 5,我的办公 table 上刚好有一个项目需要做更多。

所以我以前这样做的方法是制作一个自定义 XIB,将 UITableViewCell 拖到 Canvas 上,插入我的控件,设置自定义类,进行链接...然后在代码中加载实例化单元格解压 XIB 后遍历对象。

做了这么多次,我只有一个类别函数来处理整个事情。

现在,在 iOS 5 中,每次我制作自定义单元格时,它都会突然提供空白的白色表格单元格。

以下是插入到表格中的自定义单元格的以下特征

1) 除了“默认”UITableViewCell 控件(textLabel 等将在我为它们设置文本时填充和显示)之外完全显示纯白色。

2) isKindOfClass(MyCustomCellClass) 报告为真

3) 自定义单元类上的 Setter 方法正在运行,设置值和自定义 UILabel 的对象指针以及所有报告为非零,这意味着单元实际上正在生成并从 XIB 正确实例化

4) 出于某种原因无条件地显示像 UIStepper 这样的另类控件。所以是的,如果我在我的自定义单元格中放置一个步进器,它会显示,但标签和图像不会显示。

据我所知,默认情况下某些东西会遮挡内容 View ,否则我创建的自定义控件不再适用于单元格的 contentView(就像以前一样),而只是被扔到外太空。

例如,在 iOS 4 XIB 中,我曾经在制作自定义单元格时看到这个(摘自 Apple 的 iOS 5 文档):

Pulled from Apple's iOS 5 documentation

但就目前而言,这是我在 iOS 5 XIB 中执行相同操作时所看到的

enter image description here

因此请注意,它不再明确显示内容 View 中的那条小虚线。

在这个问题上我真的用尽了我所有的诊断知识。我试过在运行时手动将所有自定义标签直接抽取到内容 View 中,但即使这样也行不通。

我正在寻找任何想法。

编辑

加载XIB的代码

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

这是根据 Apple 较新的 iOS 5 建议对其进行简化后的当前状态。 XIB 已将其所有者正确设置为“self”类,并且 codeCell 已正确链接到具有正确类和标识符的单元格。

最佳答案

哇,这个花了我一段时间来测试,但我想我已经找到了答案...

在界面生成器中使用 Xcode4,他们添加了在界面生成器中静态设置 tableViewCells 的能力。当你想设计不会改变的 tableView 并且不想用代码编写它们时,这很酷。为了促进这一点,他们设置了在 IB 中设置 tableViewCell 样式并查看其外观的功能。当您使用自己的 subview 设计自己的单元格时,您选择“自定义”。

随着 iOS 5 的发展,我发现了以下内容;当我从 xib 加载一个单元格,然后以编程方式设置 textLabel.text 或其中一种标准单元格样式的另一个属性时,tableViewCell 似乎生成了带有默认标签的标准 View ,并用它覆盖了您的自定义 View 。因此,为了保留您的自定义单元格 subview ,您需要不访问任何标准 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,然后在重用队列中没有任何单元格时实例化该特定类型的新单元格。

checkout

– registerNib:forCellReuseIdentifier:

然后当你这样做

– dequeueReusableCellWithIdentifier:

您一定会得到指定类型的 UITableViewCell。它节省了你自己做整个 UINib 的事情。

关于iphone - iOS 5 UITableViewCell 自定义 XIB 又名 "Am I losing my mind?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992346/

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