我正在努力解决在尝试创建自定义UITableViewCell时遇到的问题。
我在SGTableViewCell中将UITableViewCell子类化,并将其添加到故事板中的原型单元格中。
如您所见,标签已连接
并正确设置了单元标识符
然后我将标签链接到SGTableViewCell.h,就像这样
@property (strong, nonatomic) IBOutlet UILabel *nameLabel;
在.m文件中我有这段代码
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
[self addGestureRecognizer:recognizer];
self.nameLabel = [[UILabel alloc] init];
_checkView = [[UIView alloc] initWithFrame:CGRectNull];
_checkView.backgroundColor = kGreen;
_checkView.alpha = 0.0;
[self addSubview:_checkView];
self.nameLabel.text = @"Hello";
}
return self;
}
但是当我在使用此代码的tableview中使用此单元格时
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Episode *episode = [self.selectedSeason.episodeList objectAtIndex:indexPath.row];
SGTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Episode"];
UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = kSelectionGrey;
cell.selectedBackgroundView = selectionColor;
cell.backgroundColor = kBackgroundGrey;
cell.nameLabel.text = episode.name;
NSLog(@"%@", cell.nameLabel.text);
cell.nameLabel.textColor = [UIColor redColor];
return cell;
}
我根本没有文字。
我尝试记录每个单元格中每个标签的文本,它给了我正确的文本。 我尝试以编程方式为自定义单元格设置不同的公开指示符,但它确实已更改,因此所有内容都已分配并正常工作,但标签未显示。 老实说,我不知道问题是什么。我错过了什么? 谢谢
部分解决:
好的,我尝试在一个空项目上做同样的事情,一切都完美无缺,所以我再次检查了我的项目并发现了这一行
[self.tableView registerClass:[SGTableViewCell class] forCellReuseIdentifier:@"Episode"];
看到这个空项目没有必要我评论了这一行,一切都开始工作了。
我现在唯一的问题是,如果我不使用此行,我不能按预期使用自定义单元格。事实上,我的自定义单元格是使用平移手势识别器可以移动的,但是没有将我的自定义类注册到tableview看起来像滑动不起作用。
对不起麻烦,好像我再搞砸了:/
答案 0 :(得分:1)
您不应该alloc init
在故事板中创建的标签,它已经自动分配。执行self.nameLabel = [[UILabel alloc] init];
时,重置self.nameLabel
属性以指向新的空内存位置,而不是指向故事板中创建的标签,因此您可以更改其text
属性并查看导致NSLog但不在故事板中,因为它没有在故事板中引用该标签。
尝试从initWithStyle
方法中删除所有初始化(以确保没有任何内容覆盖它,例如您创建的子视图),以及与cellForRowAtIndexPath
方法中的标签相关的所有内容(同样的原因),并尝试self.nameLabel.text = @"Test text"
方法中的cellForRowAtIndexPath
之类的简单分配,它应该可以正常工作。然后添加所有其他初始化。
是的,不要忘记输入您的小区重用标识符" Episode"在故事板中。
答案 1 :(得分:0)
请确保:
已将委托和数据源链接到tablview所在的视图。
拥有该视图工具UITableViewController
和UITableViewDelegate
(我非常确定这两者都是这些)。
实施您似乎已经完成的必要方法。您需要row size, section size, and the add cell
方法
更新链接到您的tableview的数组后,请致电[tableView reloadData
]