我目前正在以编程方式创建我的UITableViewCells:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Home-Cell" forIndexPath:indexPath];
if (cell == nil) {
UILabel *newLabel = [[UILabel alloc] initwithframe:cell.frame];
[cell addSubview:newLabel];
}
[newLabel setText:self.data[indexPath.row]];
return cell;
}
这似乎每次重复使用单元格时都会创建一个新的UILabel,我绝对不想要。我尝试了以下操作:
$('.myclass').css('color','#900');
$('.myclass').html('invalid');
然后似乎永远不会创建UILabel。也许这是因为我正在使用具有故事板的原型单元格,因此单元格永远不会为零?
答案 0 :(得分:2)
你有两个解决方案。
nil
,您可以在那时添加标签(就像在第二组代码中一样)。这也需要使用不dequeueReusableCellWithIdentifier
的{{1}}方法。答案 1 :(得分:0)
您应该创建一个UITableViewCell子类并添加“newLabel”作为属性。
答案 2 :(得分:0)
单元格永远不会为nil,因为用于使表格视图单元格出列的方法始终返回一个单元格,如果它在重用队列中尚不存在,则创建一个单元格。
更好的解决方案是在故事板中的单元原型中创建标签。
答案 3 :(得分:0)
此实现针对MVC架构,其中控制器管理器填充并且不处理视图。在这里,您尝试从控制器添加视图中的内容。建议将UITableViewCell
子类化如下,并在其中添加自定义UI控件
<强> MyTableViewCell.h 强>
@interface MyTableViewCell : UITableViewCell {
}
@property (nonatomic, strong) UILabel *myLabel;
@end
然后,您可以在layoutSubviews
文件中实施MyTableViewCell.m
来定义单元格的外观。
<强> MyTableViewCell.m 强>
- (id)initWithStyle:(UITableViewCellStyle)iStyle reuseIdentifier:(NSString *)iReuseIdentifier {
if ((self = [super initWithStyle:iStyle reuseIdentifier:iReuseIdentifier])) {
self.myLabel = [[UILabel alloc] initWithFrame:<Your_Frame>];
// Set more Label Properties
[self.contentView addSubview:self.myLabel];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
// Override run time properties
}
最后使用您的自定义单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Home-Cell" forIndexPath:indexPath];
if (cell == nil) {
cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Home-Cell"];
}
cell.myLabel.text = self.data[indexPath.row];
return cell;
}
作为旁注,我希望您知道textLabel
和detailTextLabel
免于默认UITableViewCell
实施。