[英]Prototype cell from storyboard not creating UILabels, etc
我的问题与这一问题非常相似。
我在使用Interface Builder使用情节提要板设计的自定义原型单元中,所有内部对象均设置为nil(未创建),因此当我尝试为其分配值时,它们保持空白。
我正在使用Xcode 4.6.2,并在6.1 iPhone模拟器中运行代码。 这是我所做的:
目前,表格中显示的分区和行数正确,但是未设置单元格的值。
这是cellForRowAtIndexPath:(NSIndexPath *)indexPath
代码:
NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"];
我总是拿回一个单元格,对于有效的对象来说,内存位置似乎还可以。
但是当我尝试cell.name.text = [thisServer name];
我发现cell.name
标签始终为nil。
没有崩溃-但没有设置我的字段。
我已经检查了一百万次,确定标识符正确-是的! 我已经遍历了Apple文档中有关情节提要的自定义单元的内容-但仍然遇到了令人沮丧的问题。
还有其他人解决了吗?
今天,我在Xcode 5的故事板上遇到了这个确切的问题。 拔出几乎所有剩余的头发后,我注意到我在viewDidLoad
中称呼它:
[self.tableView registerClass:[SwitchTableViewCell class] forCellReuseIdentifier:@"Setting"];
哎呀! 在情节提要中使用原型单元时,不需要此行。 情节提要自动为我配置。 SwitchTableViewCell *tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"Setting" forIndexPath:indexPath];
无需显式调用registerClass::
即可正常工作。
问题仍然存在, 为什么调用registerClass::
会导致某些插座无法连接。
解决此问题的一个简单方法是在原型中标记UILabel并使用以下方法进行操作:
UILabel* label = [cell viewWithTag:cellTag];
label.text = [thisServer name]
这是最明显的遗漏原因( 我一直都这样做! ):
您是否将表视图的委托和数据源设置为控制器? (即自我)
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
_tableView.delegate = self;
_tableView.dataSource = self;
}
希望您已经解决了此问题。 无论如何,由于我看不到您问题的直接答案,因此我将其写下来。
根据我在情节提要中使用自定义Prototype单元的经验,还提供indexPath。 使用以下方法:
MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];
而不是此代码:
NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"];
更改此设置将很容易解决此问题。 您将看到所有已连接的标签和图像视图,其值在表格视图中可见。
在这一个上,我的头太用力了。 结束了,我是说出我的IBOutlets有retain
,而不是strong
在我CustomUITableViewCell.h文件。 我想我需要对内存管理进行更多研究。
错误:
@property (nonatomic, retain) IBOutlet UIImageView *preview;
正确:
@property (nonatomic, strong) IBOutlet UIImageView *preview;
检查您如何初始化TableViewController。 我有同样的问题,然后我发现我没有适当地引用我的TableViewController。
因此,我必须在“ pushViewController”之前更改代码。
代替: [[TableViewController alloc]init]
使用: [self.storyboard instantiateViewControllerWithIdentifier:yourTableViewIdentifier]
并且不要忘记为您的tableview删除注册单元格类的任何代码,例如: [self.tableView registerClass:[SwitchTableViewCell class] forCellReuseIdentifier:@"Setting"];
希望能帮助到你
一些可以尝试的东西:
听起来您知道自己在做什么,但我只想提醒您一点。 确保“名称”属性设置为IBOutlet。
在IB中,您可以为文件所有者设置类类型,将其设置为自定义类。
只是为了进行故障排除,请暂时取出出队的东西并尝试一下。
尝试使用除“名称”以外的其他属性名称,但我不相信基类中存在“名称”。
我以前遇到过类似的事情,这可能很简单。
我也有完全相同的问题(单元中的标签为nil
)。
我的补救措施是删除尝试其他操作时“意外”添加到表视图的initWithCoder
方法。 从情节提要中启动单元时,将调用此方法。 如果您覆盖它,而自己却不小心启动其中的所有标签,那么最终将得到nil
标签。
因此,作为此症状的一个潜在错误:检查是否存在此方法。
-(id)initWithCoder:(NSCoder *)decoder {
self = [self init];
return self;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.