在我的表视图中,我尝试对大多数行使用默认表格视图单元格,但是想要为一行使用自定义单元格。问题是带有自定义单元格的一行。我显然没有正确加载它,因为我无法访问自定义单元格的属性。
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
[self.tableView registerNib:[UINib nibWithNibName:@"KeepLoginCell" bundle:nil]
forCellReuseIdentifier:@"KeepLoginCell"];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
cell.backgroundColor = [UIColor clearColor];
cell.textLabel.textColor = [UIColor whiteColor];
if (indexPath.section == 0) {
cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
if (indexPath.row == 0) {
cell.textLabel.text = @"Recent Purchases";
}
} else if (indexPath.section == 1) {
cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
if (indexPath.row == 0) {
cell.textLabel.text = @"Payment Method";
}
} else if (indexPath.section == 2) {
if (indexPath.row == 0) {
cell = (KeepLoginCell *)[tableView dequeueReusableCellWithIdentifier:@"KeepLoginCell"];
if (!cell) {
cell = [[KeepLoginCell alloc]init];
}
} else if (indexPath.row == 1) {
cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
cell.textLabel.text = [self.settingsArray objectAtIndex:indexPath.row];
}
}
return cell;
}
答案 0 :(得分:1)
在这一行:
cell = (KeepLoginCell *)[tableView dequeueReusableCellWithIdentifier:@"KeepLoginCell"];
即使您投射dequeue...
消息以返回KeepLoginCell*
,您的cell
值仍会声明为通用UITableViewCell
。因此,编译器/静态分析器/ xcode编辑器提示只显示与UITableViewCell
相关的内容,而不是您的自定义子类。
请改用:
KeepLoginCell *klcell = (KeepLoginCell *)[tableView dequeue…
[klcell setCustomProperty:…];
cell = klcell;
答案 1 :(得分:1)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
cell.backgroundColor = [UIColor clearColor];
cell.textLabel.textColor = [UIColor whiteColor];
if (indexPath.section == 0) {
if (indexPath.row == 0) {
cell.textLabel.text = @"Recent Purchases";
} else {
//TODO: handle this case
}
} else if (indexPath.section == 1) {
if (indexPath.row == 0) {
cell.textLabel.text = @"Payment Method";
} else {
//TODO: handle this case
}
} else if (indexPath.section == 2) {
if (indexPath.row == 0) {
KeepLoginCell *customCell = (KeepLoginCell *)[tableView dequeueReusableCellWithIdentifier:@"KeepLoginCell"];
if (!customCell) {
customCell = [[KeepLoginCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"KeepLoginCell"];
}
//TODO: set values to your custom cell
//e.g. customCell.myLabel.text = ...
cell = customCell;
} else if (indexPath.row == 1) {
cell.textLabel.text = [self.settingsArray objectAtIndex:indexPath.row];
} else {
//TODO: handle this case
}
}
return cell;
}
答案 2 :(得分:0)
问题是你没有任何类型KeepLoginCell
的变量。因此,如果您确定自己的单元格是KeepLoginCell
,则必须在每次调用时将其强制转换:
[((KeepLoginCell*)cell) keepIt];
或者你可以把它放在这种类型的变量中
KeepLoginCell* keepLoginCell = (id)cell;
[keepLoginCell keepIt];