我需要在cellForRowAtIndexPath
的开头创建一个对象,用开关部分在其中添加不同的单元格:
switch (indexPath.section) {
case DetailControllerAddressSection: {
NSString *address = [self addressText];
UITableViewCell *cell;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
if (IS_OS_7_OR_LATER) {
cell = (CustomDetailCell *) [tableView dequeueReusableCellWithIdentifier:@"AddressCell" forIndexPath:indexPath];
cell.mainLabel.text = address;
cell.detailLabel.text = [self distanceMessageForObjectData:self.objectData];
} else {
UniversalAddressCell *cell = (UniversalAddressCell *) [tableView dequeueReusableCellWithIdentifier:@"UniversalAddressCell" forIndexPath:indexPath];
cell.backgroundView = [self cellBackgroundImageView:indexPath];
cell.mainLabel.text = address;
...
但在这种情况下,单元格是UITableViewCell
,我无法从CustomDetailCell
类获取标签。怎么解决这个?我相信这个决定很简单,但我不知道如何解决它。
答案 0 :(得分:1)
我猜你会做类型转换..
[(CustomDetailCell *)cell mainLabel].text = address;
答案 1 :(得分:1)
问题在于:UITableViewCell *cell;
即使您将单元格转换为(CustomDetailCell *)
,存储类型仍为UITableViewCell
你能做的是:
switch (indexPath.section) {
case DetailControllerAddressSection: {
NSString *address = [self addressText];
UITableViewCell *cell;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
if (IS_OS_7_OR_LATER) {
CustomDetailCell *detailCell = (CustomDetailCell *) [tableView dequeueReusableCellWithIdentifier:@"AddressCell" forIndexPath:indexPath];
detailCell.mainLabel.text = address;
detailCell.detailLabel.text = [self distanceMessageForObjectData:self.objectData];
cell = detailCell;
} else {
UniversalAddressCell *universalCell = (UniversalAddressCell *) [tableView dequeueReusableCellWithIdentifier:@"UniversalAddressCell" forIndexPath:indexPath];
universalCell.backgroundView = [self cellBackgroundImageView:indexPath];
universalCell.mainLabel.text = address;
cell = universalCell;
答案 2 :(得分:1)
如果两个单元格有两个不同的NIB:
static NSString * simpleTableIdentifier = @“SimpleTableCell”;
SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
switch (indexPath.section) {
case DetailControllerAddressSection:
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell1" owner:self options:nil];
cell1 = [nib objectAtIndex:0];
// write here cell1 specific
cell=cell1;
break;
case anotherCase:
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell2" owner:self options:nil];
cell2 = [nib objectAtIndex:0];
// write here cell2 specific
cell=cell2;
}
}
return cell;