gpt4 book ai didi

ios - Storyboard中 tableviewController 中的原型(prototype) tableview 单元格

转载 作者:行者123 更新时间:2023-12-01 17:52:27 25 4
gpt4 key购买 nike

我有一个最初不是 Storyboard应用程序的应用程序。我已经为一个特性分支添加了一个 Storyboard,并且有一个 UITableViewController 的子类。在上面。我创建了一个带有多个 UILabels 的原型(prototype)单元。和 UIImageViews ,并为它们中的每一个添加了标签。原型(prototype)单元具有正确的标识符。

我已经使用标识符注册了该类:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CustomCell"];

当我尝试将自定义单元格出列并访问其 View 时:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell" forIndexPath:indexPath];
UIImageView *icon = (UIImageView *)[cell viewWithTag:1];

View (图标)为零。

我也尝试过对其进行子类化,并使用重用标识符注册子类,并设置 UITableViewCell与原型(prototype)中的子类名称。在这种情况下,
UIImageView *icon = cell.icon; 

仍然返回零。

Storyboard不是主要的有什么关系吗?我有其他项目,其中使用自定义 subviews 的原型(prototype)单元没有所有这些麻烦就可以正常工作。有没有办法注册自定义类或 UITableViewCell使用自定义标识符,但指定它来自哪个 Storyboard ?

最佳答案

好的我已经想通了,我要回答一下,以便记下我学到的一些小东西。

我的 Controller 正在使用 alloc/init 而不是

[_storyboard instantiateViewControllerWithIdentifier:@".."]. 

这意味着 Storyboard从未使用过,原型(prototype)单元也从未注册过。

因此,当使用辅助 Storyboard 并以编程方式而不是通过 segue 实例化 Controller 时,请确保使用 instantiateViewControllerWithIdentifier。

不要注册单元格或注册自定义类:
// don't do this
[self.tableView registerClass:[ClaimsCell class] forCellReuseIdentifier:@"ClaimsCell"];

使用以下命令使单元格出列:
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AddClaimCell" forIndexPath:indexPath];

这样,编译器实际上会通知您原型(prototype)单元尚未连接。不要试图使用旧的 tableview dequeue 调用:
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AddClaimCell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CustomCell"];
}

因为如果您正确连接了 Storyboard,则单元格将始终由 forIndexPath: 调用返回。

我选择使用带有 View 标签的 UITableViewCell 而不是制作自定义类。但是可以将原型(prototype)单元格设置为自定义的 UITableViewCell 子类,并且可以引用各个单元格元素,如果它们在 Storyboard 中已连接。

实例化一个 UITableViewCell:
    UIImageView *icon = (UIImageView *)[cell viewWithTag:1];
UILabel *labelDescription = (UILabel *)[cell viewWithTag:2];
UILabel *labelStatus = (UILabel *)[cell viewWithTag:3];

实例化一个 CustomCell:
    UIImageView *icon = cell.iconStatus;
UILabel *labelDescription = cell.labelDescription;
UILabel *labelStatus = cell.labelStatus;

关于ios - Storyboard中 tableviewController 中的原型(prototype) tableview 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457107/

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