gpt4 book ai didi

ios - 滚动查询时 UITableView 单元格颜色发生变化

转载 作者:行者123 更新时间:2023-11-29 13:04:29 24 4
gpt4 key购买 nike

在我的应用程序中,我在 NSMutableArray 中提出一些问题并显示在 tableView 行上。我在每个问题下都有两个按钮(tableView 行按钮)。按 YES 和 NO 按钮,TableRow 颜色分别变为绿色、黄色。

问题是按下特定行的按钮后,该行变为绿色。但是在滚动之后,不需要的单元格也会变成绿色/黄色。

能否请你检查我下面的代码并提出建议

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

contentView.hidden = YES;
if( tableView == myChklist)
{

static NSUInteger const kQuestLabelTag = 1;
static NSUInteger const kYesButtonTag = 2;
static NSUInteger const kNoButtonTag = 3;

UILabel *QuestLabel = nil;
UIButton *YesButton;
UIButton *NoButton;

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

cell.selectionStyle = UITableViewCellSelectionStyleNone; //cell bg
//self.myChklist.backgroundColor = [UIColor clearColor];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{

QuestLabel = [[UILabel alloc] initWithFrame:CGRectMake(5,5,768,0)];

//some logic code
[cell.contentView addSubview:QuestLabel];


NSString *titleString = [buildingQuest objectAtIndex:indexPath.row] ;
CGSize titleSize = [titleString sizeWithFont:[UIFont boldSystemFontOfSize:18] constrainedToSize:CGSizeMake(670, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];

UIButton *YesButton = [UIButton buttonWithType:UIButtonTypeCustom];

//some logic button code

[cell.contentView addSubview:YesButton];

UIButton *NoButton = [UIButton buttonWithType:UIButtonTypeCustom];
//some logic button code

[cell.contentView addSubview:NoButton];



}
else

{

QuestLabel = (UILabel *)[cell.contentView viewWithTag:kQuestLabelTag];
YesButton = (UIButton *)[cell.contentView viewWithTag:kYesButtonTag];
NoButton = (UIButton *)[cell.contentView viewWithTag:kNoButtonTag];


}


QuestLabel.text = [buildingQuest objectAtIndex:indexPath.row];

QuestLabel.numberOfLines = 0;

NSString *titleString = [buildingQuest objectAtIndex:indexPath.row] ;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
CGSize titleSize = [titleString sizeWithFont:[UIFont boldSystemFontOfSize:18] constrainedToSize:CGSizeMake(670, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];
CGRect rect = QuestLabel.frame;
rect.size.height = titleSize.height+10;
QuestLabel.frame = rect;

YesButton.frame = CGRectMake(10,titleSize.height+15,60,30);
NoButton.frame = CGRectMake(95,titleSize.height+15,60,30);

}


if([self getCheckedForIndex:indexPath.row]==YES)
{
cell.backgroundColor = [UIColor greenColor];
Cam_Button.hidden = NO;

}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}


if([self getCheckedForYellow_Index:indexPath.row]==YES)
{
cell.backgroundColor = [UIColor yellowColor];
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}


return cell;

}
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];


if([self getCheckedForIndex:indexPath.row]==YES)
{
cell.backgroundColor = [UIColor greenColor];
Cam_Button.hidden = NO;

}
if([self getCheckedForYellow_Index:indexPath.row]==YES)
{
cell.backgroundColor = [UIColor yellowColor];
}


if ([self.arrayCheckUnchek containsObject:indexPath])
{
cell.backgroundColor = [UIColor greenColor];
Cam_Button.hidden = NO;

}

if ([arrayCheckUnchek2 containsObject:indexPath])
{
cell.backgroundColor = [UIColor yellowColor];
}

}



- (void)tableView: (UITableView*)tableView
willDisplayCell: (UITableViewCell*)cell
forRowAtIndexPath: (NSIndexPath*)indexPath
{
UITableViewCell *Cell = [myChklist cellForRowAtIndexPath:indexPath];
//same code as didSelectRowAtIndexPath method

}



-(void)NoAction:(id)sender event: (id)event
{
_cellButtonPress = YES;
checkUncheck = YES;
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.myChklist];
NSIndexPath *indexPath = [self.myChklist indexPathForRowAtPoint: currentTouchPosition];
UIButton *button = (UIButton *)sender;
UITableViewCell *cell = (UITableViewCell *)button.superview.superview;

cell.backgroundColor = [UIColor yellowColor];
[self checkedCellAtYellow_Index:indexPath.row];

[arrayCheckUnchek2 addObject:indexPath];
}

最佳答案

您需要设置新分配的单元格的背景颜色。如果您不这样做,那么当重新使用变成绿色的单元格时,它们将保持绿色。

    if (cell == nil) {
cell.backgroundColor = [UIColor clearColor];
...

关于ios - 滚动查询时 UITableView 单元格颜色发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18985451/

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