【发布时间】:2014-10-20 10:03:53
【问题描述】:
请保存我的头发或指出我的(明显)错误。我正在尝试在子类 UITableViewController 中使用 UITableViewCellStyleSubtitle 的 UITableViewStyle。
我在实现中定义了一个静态常量:
static NSString * const kAHCellIdentifier;
在viewDidLoad我注册了一个tableView类:
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kAHCellIdentifier];
然后在tableView:cellForRowAtIndexPath 中初始化单元格如下:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kAHCellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kAHCellIdentifier];
}
运行应用程序(设备或 sim)时,单元格会加载,但没有显示 detailTextLabel,但是如果我这样初始化,它可以正常工作*
我的猜测是该常量实际上并不是静态的,或者存在错误(8.0.2),或者由于缺乏睡眠或其他原因,我完全丢失了某些东西。
还可以指出,如果我不注册该类,则会出现编译器错误(预期),但即使单元格标识符不同(我猜这是预期的,因为我可以为不同的注册不同的类)单元格样式。
我错过了什么?
编辑
使用[tableView dequeueReusableCellWithIdentifier:kAHCellIdentifier forIndexPath:indexPath]; 也无效。
简短的问题
如果我在 cellForRowAtIndexPath 方法调用中使用静态 NSString,而不是,如果我使用类级全局常量,为什么 dequeueReusableCellWithIdentifier 返回 nil 并因此使用 cell == nil 块中的 UITableViewCellStyle 启动单元格如上所述。
附加
更多的测试产生了一些不同的结果。如果您为单元重用标识符注册一个类,然后在cellForRowAtIndexPath 中为单元提供不同的标识符,那么它可以工作。如果你给它的名字和注册的类一样,那么它就不能按预期工作。
回答
经过一些测试和@MANIAK_dobrii 的回答,有些清晰。
如果您想使用较新的单元格出队方法dequeueReusableCellWithIdentifier:forIndexPath 并需要使用UITableViewCellStyle 而非默认值,则需要继承UITableViewCell 并覆盖initWithStyle 方法调用中的tableview 样式。
如果您乐于使用旧方法,请确保您没有为重用标识符注册类,否则它将无法工作。
【问题讨论】:
-
@joe 为什么在我的问题上显示被拒绝的编辑,实际上它改变了问题的基础?
标签: ios objective-c xcode uitableview