UILabel
每次加载时,UITableViewCell
内的文字值都会被重叠。我的cell height
为140 cell.TextLabel.text
无法设置frame
并且让它显示在centre.But我需要TitleText显示在cell的开头。所以,我使用UILabel
显示我需要的。但每次加载单元格时它显示错误的标题为那些单元格。但是当我记录该数组时,它正确记录,如果我检查cell.TextLabel.text
它正确显示。但不在UILabel
。困惑很多。无法追踪我出错的地方。谢谢你提前。
以下是我的代码。
`
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 140;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *Title;
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
Title = [[UILabel alloc]init ];
Title.frame =CGRectMake(20, 18, 152, 23);
[Title sizeToFit];
}
NSMutableArray *contentArray = [sectionDict valueForKey:[array objectAtIndex:indexPath.section]];
NSLog(@"content %@",contentArray);
Title.text = [contentArray objectAtIndex:indexPath.row];
[cell addSubview:Title];
UIImageView *seaImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"PacificOcean.png" ]];
seaImage.frame = CGRectMake(20, 60, 280, 80);
[cell addSubview:seaImage];
return cell;
}
`
答案 0 :(得分:2)
将您的子视图标签和图片添加到每个子视图的cell == nil
块集标记中的单元格。按标记访问块外的子视图。我希望它对你有所帮助。
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UILabel *Title = [[UILabel alloc]init ];
Title.tag = 1000;
Title.frame =CGRectMake(20, 18, 152, 23);
[Title sizeToFit];
[cell.contentView addSubview:Title];
UIImageView *seaImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"PacificOcean.png" ]];
seaImage.frame = CGRectMake(20, 60, 280, 80);
[cell.contentView addSubview:seaImage];
}
NSMutableArray *contentArray = [sectionDict valueForKey:[array objectAtIndex:indexPath.section]];
UILabel *Title = (UILabel *)[cell.contentView viewWithTag:1000];
Title.text = [contentArray objectAtIndex:indexPath.row];
return cell;
像这样更改您的代码..
答案 1 :(得分:2)
像这样使用你的代码
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *Title;
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
Title = [[UILabel alloc]init ];
Title.frame =CGRectMake(20, 18, 152, 23);
[Title sizeToFit];
[cell.contentView addSubview: Title];
UIImageView *seaImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"PacificOcean.png" ]];
seaImage.frame = CGRectMake(20, 60, 280, 80);
[cell.contentView addSubview: seaImage];
}
NSMutableArray *contentArray = [sectionDict valueForKey:[array objectAtIndex:indexPath.section]];
NSLog(@"content %@",contentArray);
Title.text = [contentArray objectAtIndex:indexPath.row];
return cell;
}
答案 2 :(得分:1)
我不知道这是否是您的错误,但cell.TextLabel.text
是NSString,因此您无法将框架设置为该框架,但cell.TextLabel.frame
应该有效。您在使用的方法中遇到的另一个问题是UILabel *Title;
在if语句之外被声明,如果语句结束,如果您成功将单元格出列,那么它将在nil
之后运行。而且,由于Objective-C对你很好,所以当你将消息传递给nil
时,它不会抱怨。如果您想使用此批准,您还需要在if语句中将标签添加到您的单元格中,可能带有标签,然后在您想要设置框架时获得相同的标签。这与您的seaImage
相同,每次提供单元格时都不应添加新的。{/ p>