Ios 故事板中的原型单元不创建UILabel等
我的问题非常类似。Ios 故事板中的原型单元不创建UILabel等,ios,objective-c,uitableview,storyboard,Ios,Objective C,Uitableview,Storyboard,我的问题非常类似。 我在Interface Builder中使用故事板设计的自定义原型单元的所有内部对象都设置为nil(未创建),因此,当我尝试为它们赋值时,它们仍然为空 我正在使用Xcode 4.6.2,并在6.1 iPhone模拟器中运行代码。以下是我所做的: 在interface builder中设计了一个带有必要字段的原型单元 在代码中为此自定义单元格创建UITableViewCell的子类,然后在interface builder中将该单元格设置为此类型 控件将字段拖到.h文件中,该
我在Interface Builder中使用故事板设计的自定义原型单元的所有内部对象都设置为nil(未创建),因此,当我尝试为它们赋值时,它们仍然为空 我正在使用Xcode 4.6.2,并在6.1 iPhone模拟器中运行代码。以下是我所做的:
- 在interface builder中设计了一个带有必要字段的原型单元李>
- 在代码中为此自定义单元格创建UITableViewCell的子类,然后在interface builder中将该单元格设置为此类型李>
- 控件将字段拖到.h文件中,该文件为我设置了对象(UILabels等)。我将单元格的标识符设置为“serverNameCell”
- 将表的数据源和委托设置为表所在的Viewcontroller
- 将表格与ViewControler中的表格对象关联
cellforrowatinedexpath:(nsindepath*)indepath
code:
NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"];
我总是得到一个单元格,对于一个有效的对象,内存位置似乎还可以
但是当我尝试cell.name.text=[thisservername]
我发现cell.name
标签总是为零。没有崩溃-但是没有设置我的字段 我已经检查了一百万次,确认标识符是正确的-它是正确的! 我已经从故事板上浏览了苹果公司定制电池的文档,但仍然遇到了这个令人沮丧的问题 还有其他人有这个问题,并且解决了吗 一些可以尝试的东西: 听起来你好像知道自己在做什么,但我会提到显而易见的事情来提醒你。确保将“name”属性设置为IBOutlet
- 在IB中,您可以设置文件所有者的类类型,将其设置为 您的自定义类
- 只是为了排除故障,把排队的东西拿出来 暂时尝试一下
- 请尝试“name”以外的其他属性名称我不相信“name” 但存在于基类中
我以前也遇到过类似的事情,可能很简单 解决此问题的一个简单方法是在原型中标记UILabel,并使用以下工具对其进行操作:
UILabel*label=[cell viewWithTag:cellTag];
label.text=[thisServer name]
这是最明显遗漏的原因(我一直这么做!):
是否将tableview的委托和数据源设置为控制器?(即自我)
我今天在Xcode 5的故事板上遇到了这个问题。在拔出几乎所有剩余的头发后,我注意到我在
viewDidLoad
中调用了这个:
[self.tableView注册表类:[SwitchTableViewCell类]强制重用标识符:@“设置”]代码>
哎呀!在故事板中使用原型单元时,不需要这一行。故事板会自动为我配置这个<代码>SwitchTableViewCell*tableViewCell=[tableView dequeueReusableCellWithIdentifier:@“设置”为indexPath:indexPath]代码>工作正常,无需显式调用注册表类::
问题仍然是,为什么调用注册表类::会导致某些插座无法连接。希望您已经解决了此问题。无论如何,因为我没有看到一个直截了当的答案,你的问题,我写下这一点 根据我在故事板中使用自定义原型单元的经验,还提供了indexPath。使用以下方法:
MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];
而不是此代码:
NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"];
更改此选项将很容易解决此问题。您将看到所有连接的标签和图像视图,其值在tableview上可见。我也有完全相同的问题(单元格中的标签为
nil
)
我的补救办法是删除一个initWithCoder
方法,该方法是我在尝试其他东西时“意外”添加到表视图中的。当单元格从情节提要启动时,将调用此方法。如果您覆盖它,并且不注意自己启动它内部的所有标签,那么您将得到nil
标签
因此,作为该症状的一个潜在错误:检查该方法是否存在
-(id)initWithCoder:(NSCoder *)decoder {
self = [self init];
return self;
}
这件事太让我头疼了。结果是我在CustomUITableViewCell.h文件中用
retain
而不是strong
声明了我的IBOutlets。我想我需要更多地研究内存管理
错:
@property (nonatomic, retain) IBOutlet UIImageView *preview;
正确:
@property (nonatomic, strong) IBOutlet UIImageView *preview;
检查如何初始化TableViewController。 我也有同样的问题,然后我发现我没有正确地引用TableViewController 所以我必须在“pushViewController”之前更改代码 而不是:
[[TableViewController alloc]init]
使用:[self.storyboard实例化eviewcontrollerwhiteIdentifier:yourTableViewIdentifier]
不要忘记删除任何为tableview注册单元格类的代码,如:[self.tableview registerClass:[SwitchTableViewCell类]forCellReuseIdentifier:@“设置”]代码>
希望它能有所帮助如果您登录cell,它会说它是NewServerCell,而不是UITableViewCell吗?@rdelmar:是的,它是NewServerCell,但它的所有属性(以及它的ancester UITableViewCell的属性)都是nillhmm。。。。这种问题很难诊断,因为你所说的一切听起来都是正确的。您是否使用了其中一种注册方法(用于注册类或nib)?如果单元是在故事板中生成的,则不应使用这两种单元中的任何一种。您的自定义单元格代码中除了IBOutlets之外还有其他内容吗?@rdelmar:我尝试了使用和不使用注册类forCellReuseIdentifier
——现在没有,也没有骰子。除了(连接的)iBoutlets什么都没有如果你在某个地方
@property (nonatomic, retain) IBOutlet UIImageView *preview;
@property (nonatomic, strong) IBOutlet UIImageView *preview;