我使用以下代码来显示Custom UITableViewCell。但问题是它只显示backImage
并且不显示任何其他标签或图像。
这是代码和ss。
有什么问题???
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UIImageView *maleIcon;
UIImageView *femaleIcon;
UIImageView *backImage;
UILabel *name;
UILabel *address;
UILabel *maleCount;
UILabel *femaleCount;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
VenueClass *venue = [self.venueArray objectAtIndex:[indexPath row]];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyIdentifier"];
backImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];
maleIcon = [[UIImageView alloc] initWithFrame:CGRectMake(234,143,25,25)];
femaleIcon = [[UIImageView alloc] initWithFrame:CGRectMake(234,173,25,25)];
maleIcon.image = [UIImage imageNamed:@"rectangle.png"];
femaleIcon.image = [UIImage imageNamed:@"rectangle.png"];
name = [[UILabel alloc] initWithFrame:CGRectMake(10,148,140,22)];
address = [[UILabel alloc] initWithFrame:CGRectMake(10,178,140,22)];
maleCount = [[UILabel alloc] initWithFrame:CGRectMake(266,145,48,22)];
femaleCount = [[UILabel alloc] initWithFrame:CGRectMake(266,175,48,22)];
name.font = [UIFont boldSystemFontOfSize:16];
address.font = [UIFont systemFontOfSize:14];
maleCount.font = [UIFont boldSystemFontOfSize:14];
femaleCount.font = [UIFont boldSystemFontOfSize:14];
name.backgroundColor = [UIColor clearColor];
address.backgroundColor = [UIColor clearColor];
maleCount.backgroundColor = [UIColor clearColor];
femaleCount.backgroundColor = [UIColor clearColor];
name.textColor = [UIColor whiteColor];
address.textColor = [UIColor whiteColor];
maleCount.textColor = [UIColor whiteColor];
femaleCount.textColor = [UIColor whiteColor];
[cell.contentView addSubview:backImage];
[cell.contentView addSubview:name];
[cell.contentView addSubview:address];
[cell.contentView addSubview:maleCount];
[cell.contentView addSubview:femaleCount];
[cell.contentView addSubview:femaleIcon];
[cell.contentView addSubview:maleIcon];
}
CLLocation *location = [[CLLocation alloc] initWithLatitude:[venue.latitude doubleValue] longitude:[venue.longitude doubleValue]];
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
int distance = [location distanceFromLocation:appDelegate.myLocationCtrl.locationManager.location];
distance = distance / 1000;
[femaleCount setText:venue.femaleCount];
[maleCount setText:venue.maleCount];
[name setText:venue.name];
[address setText:[NSString stringWithFormat:@"%@/%d Km", venue.address, distance]];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.backgroundColor = [UIColor clearColor];
NSString *path = [[NSString stringWithFormat:@"%@%@" ,IMAGE_URL, venue.imagePath ] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[backImage setImageWithURL:[NSURL URLWithString:path] placeholderImage:[UIImage imageNamed:@""]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)
{
}];
return cell;
}
答案 0 :(得分:1)
是的,您的背面图像太宽而且很高,您将其设置为320x100尝试60x100
抱歉编辑:您的其他项目不在屏幕/单元格中,因为它们是Y坐标> 100。 Tr减少initWithFrame的第二个参数:CGRectMake(X,Y必须小于单元格高度,宽度,高度)
答案 1 :(得分:0)
您是否在代码中注册了标识MyIdentifier
的课程?
如果是这样,那么cell
将永远不会为零,因为dequeueReusableCellWithIdentifier:
方法将始终返回一个单元格。来自文档:
如果您为指定的标识符注册了一个类并且必须创建一个新的单元格,则此方法通过调用其initWithStyle:reuseIdentifier:方法来初始化该单元格。对于基于nib的单元格,此方法从提供的nib文件加载单元格对象。如果现有单元可用于重用,则此方法将调用单元的prepareForReuse方法。
这意味着您的代码永远不会运行您在if(cell == nil){}
声明中执行的设置
如果您没有为该重用标识符注册Class或Nib,则应用程序应该崩溃并出现异常,因此我怀疑您在应用程序中看到的内容是您注册的默认nib或类的内容。< / p>
一种常见的方法是在自定义UITableViewCell类或nib中配置所有这些子标签和imageView,然后在此tableView:cellForRowAtIndexPath:
方法中为这些属性分配相关值。