gpt4 book ai didi

ios - 滚动后使用可重复使用的单元格与 uitableview 单元格的内容重叠

转载 作者:行者123 更新时间:2023-11-29 03:28:40 26 4
gpt4 key购买 nike

当我使用 dequeReusableCell 时,当我向下或向上滚动时,最后一个单元格的内容(超出可见屏幕)会重叠,但每次创建新单元格时都会起作用。我想使用 dequereusble 功能。

以下代码可以工作,但是当我取消注释时,可取消队列问题的部分再次出现。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *cellIdentifier=@"Cell";

//Code causing problem
/*UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if(!cell)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}*/

//Code working fine
UITableViewCell *cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 10, 180, 20)];
[titleLabel setFont:[UIFont boldSystemFontOfSize:15]];

UIImageView *headerImageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 200)];
headerImageView.image=[UIImage imageNamed:@"offer_details.jpg"];

UILabel *detailLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 30, 300, 20)];
[detailLabel setFont:[UIFont systemFontOfSize:14]];

UIButton *callButton=[[UIButton alloc]initWithFrame:CGRectMake(10, 30, 20, 20)];
[callButton setBackgroundColor:[UIColor orangeColor]];

MKMapView *mapView=[[MKMapView alloc] initWithFrame:CGRectMake(10, 30, 320, 200)];

switch (indexPath.row) {
case 0:
[cell.contentView addSubview:headerImageView];
[cell setBackgroundColor:[UIColor blackColor]];
titleLabel.text=@"Get great offer Upto 20% Off";
titleLabel.frame=CGRectMake(10, 220, 230, 20);
titleLabel.textColor=[UIColor colorWithRed:251.0/255.0f green:78.0f/255.0f blue:8.0f/255.0f alpha:1];
detailLabel.frame=CGRectMake(10, 240, 300, 20);
detailLabel.textColor=[UIColor whiteColor];
detailLabel.text=@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt.";
[cell.contentView addSubview:detailLabel];
break;
case 1:
titleLabel.text=@"Details";
detailLabel.text=@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ";
[cell.contentView addSubview:detailLabel];
break;
case 2:
titleLabel.text=@"Collection Methods";
detailLabel.text=@"Call and Reserve";
detailLabel.frame=CGRectMake(50, 30, 300, 20);
[cell.contentView addSubview:detailLabel];
[cell.contentView addSubview:callButton];
break;
case 3:
titleLabel.text=@"Location";
[cell.contentView addSubview:mapView];
break;
case 4:
titleLabel.text=@"About us";
detailLabel.text=@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.";
[cell.contentView addSubview:detailLabel];
break;
case 5:
titleLabel.text=@"Legal";
detailLabel.text=@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.";
[cell.contentView addSubview:detailLabel];

break;
default:
break;
}

detailLabel.numberOfLines=0;
[detailLabel sizeToFit];
[cell.contentView addSubview:titleLabel];


return cell;
}

编辑:

由于行的内容不常见,我是否能够使用可取消队列的单元格?一行包含图像,一行包含 map View ,一行仅包含标签。提前致谢。

编辑2:

@HRM 现在显示除第一个单元格之外的详细信息标签空白

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{ 静态 NSString *cellIdentifier=@"Cell";

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

//UITableViewCell *cell;

if(!cell)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 10, 180, 20)];
[titleLabel setFont:[UIFont boldSystemFontOfSize:13]];
titleLabel.tag=1001;

[cell.contentView addSubview:titleLabel];
switch (indexPath.row) {
case 0:
{
UIImageView *headerImageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 200)];
headerImageView.image=[UIImage imageNamed:@"offer_details.jpg"];
headerImageView.tag=1002;

UILabel *detailLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 30, 300, 20)];
[detailLabel setFont:[UIFont systemFontOfSize:12]];
detailLabel.tag=1003;
detailLabel.numberOfLines=0;
[detailLabel sizeToFit];
[cell.contentView addSubview:headerImageView];
[cell.contentView addSubview:detailLabel];
}
break;

case 1:
{
UILabel *detailLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 30, 300, 20)];
[detailLabel setFont:[UIFont systemFontOfSize:12]];
detailLabel.numberOfLines=0;
[detailLabel sizeToFit];
[cell.contentView addSubview:detailLabel];
detailLabel.tag=1004;
}
break;
case 2:
{
UILabel *detailLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 30, 300, 20)];
[detailLabel setFont:[UIFont systemFontOfSize:12]];
UIButton *callButton=[[UIButton alloc]initWithFrame:CGRectMake(10, 30, 15, 15)];
[callButton setBackgroundColor:[UIColor orangeColor]];
detailLabel.numberOfLines=0;
[detailLabel sizeToFit];
[cell.contentView addSubview:detailLabel];
detailLabel.tag=1005;
[cell.contentView addSubview:callButton];
}
break;
case 3:
{
MKMapView *mapView=[[MKMapView alloc] initWithFrame:CGRectMake(0, 30, 320, 140)];
[cell.contentView addSubview:mapView];
}
break;
case 4:
{
UILabel *detailLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 30, 300, 20)];
[detailLabel setFont:[UIFont systemFontOfSize:12]];
detailLabel.tag=1006;
detailLabel.numberOfLines=0;
[detailLabel sizeToFit];
[cell.contentView addSubview:detailLabel];
}
break;
case 5:
{
UILabel *detailLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 30, 300, 20)];
[detailLabel setFont:[UIFont systemFontOfSize:12]];
detailLabel.tag=1007;
detailLabel.numberOfLines=0;
[detailLabel sizeToFit];
[cell.contentView addSubview:detailLabel];
}
break;
default:
break;
}
}


switch (indexPath.row) {
case 0:
{
[cell setBackgroundColor:[UIColor blackColor]];
UILabel *titleLabel = (UILabel*)[cell.contentView viewWithTag:1001];
UILabel *detailLabel=(UILabel*)[cell.contentView viewWithTag:1003];
titleLabel.text=@"Get great offer Upto 20% Off";
titleLabel.frame=CGRectMake(10, 210, 230, 20);
titleLabel.textColor=[UIColor colorWithRed:251.0/255.0f green:78.0f/255.0f blue:8.0f/255.0f alpha:1];
detailLabel.frame=CGRectMake(10, 230, 300, 20);
detailLabel.textColor=[UIColor whiteColor];
detailLabel.text=@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt.";
}
break;
case 1:
{
UILabel *titleLabel = (UILabel*)[cell.contentView viewWithTag:1001];
UILabel *detailLabel=(UILabel*)[cell.contentView viewWithTag:1004];
titleLabel.text=@"Details";
detailLabel.text=@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ";
}
break;
case 2:
{
UILabel *titleLabel = (UILabel*)[cell.contentView viewWithTag:1001];
UILabel *detailLabel=(UILabel*)[cell.contentView viewWithTag:1005];
titleLabel.text=@"Collection Methods";
detailLabel.text=@"Call and Reserve";
detailLabel.frame=CGRectMake(30, 30, 300, 20);

}
break;
case 3:
{
UILabel *titleLabel = (UILabel*)[cell.contentView viewWithTag:1001];
titleLabel.text=@"Location";
}
break;
case 4:
{
UILabel *titleLabel = (UILabel*)[cell.contentView viewWithTag:1001];
UILabel *detailLabel=(UILabel*)[cell.contentView viewWithTag:1006];
titleLabel.text=@"About us";
detailLabel.text=@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. \n\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.";
}
break;
case 5:
{
UILabel *titleLabel = (UILabel*)[cell.contentView viewWithTag:1001];
UILabel *detailLabel=(UILabel*)[cell.contentView viewWithTag:1007];
titleLabel.text=@"Legal";
detailLabel.text=@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. \n\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.";

}
break;
default:
break;
}





return cell;

}

最佳答案

当您使用 dequeueReusableCellWithIdentifier 时,tableView 将重用现有的单元格,并且在您的代码中,您尝试一次又一次地创建新控件,因此它会重叠。这样做的最佳方法是这样的。请通过这个。希望对您有所帮助。

根据您的评论进行更新。

static NSString *cellIdentifier= @"Cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

//If tableView dont have cell available for reuse, then
//create a new cell and attach the controls to it
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

if(indexPath.row == 0){

UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 10, 180, 20)];
[titleLabel setFont:[UIFont boldSystemFontOfSize:15]];
titleLabel.tag = 1002;
[cell.contentView addSubview:titleLabel];
}
}

//Now we have a cell object with controls attached.
//Now to update the contents on the control, just get the control from cell
//using its tag and set your data from datasource
if(indexPath.row == 0){
UILabel *titleLabel = (UILabel*)[cell.contentView viewWithTag:1002];
titleLabel.text = //Text from your datasource for this row
}

请注意,您还需要注意 heightForRowAtIndexPath 中的高度。同样的逻辑也将在那里应用。

关于ios - 滚动后使用可重复使用的单元格与 uitableview 单元格的内容重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20116552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com