gpt4 book ai didi

iphone - 选定的 UITableViewCell 背景颜色在滚动时发生变化

转载 作者:搜寻专家 更新时间:2023-10-30 19:58:17 28 4
gpt4 key购买 nike

我已经为这些单元格设置了自定义背景颜色。当我选择单元格时背景颜色工作正常,但是,当我向下滚动并返回时,可能会发生两件事:

  1. 如果选中的单元格不多,超出 View 的单元格有时会在选中时返回默认的蓝色。

  2. 如果选择了大部分或所有单元格,则退出的单元格会返回之前存在的单元格上的一种颜色 - 即。我选择所有单元格,向下滚动然后向上滚动,顶部的单元格与底部的单元格具有相同的颜色(或者至少其中一些 - 其他单元格保留自己的颜色)。

这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *row = [tableView cellForRowAtIndexPath:indexPath];
UIView *backview = [[UIView alloc] initWithFrame:row.frame];
backview.backgroundColor = [colours objectAtIndex:indexPath.row];
row.selectedBackgroundView = backview;
}

这就是为单元格选择的方法改变颜色的地方。单元格在此处创建:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"eventTypeID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSString *sEventType = [[self.eventTypes valueForKeyPath:@"name.text"] objectAtIndex:indexPath.row];
cell.textLabel.text = sEventType;
return cell;
}

每个单元格的颜色都在这里设置:

- (void)loadView {
colours = [[NSMutableArray alloc] init];
CGFloat red[] = {0.84,0.86,0.7,0.46,0.56,0.44,0.95,0.91,0.91,0.76,0.06,0.8,0.73,0.0,0.0,0.01,0.18,0.23,0.57,0.18};
CGFloat green[] = {0.12,0.01,0.07,0.17,0.32,0.18,0.49,0.49,0.78,0.61,0.48,0.85,0.85,0.28,0.38,0.53,0.23,0.36,0.32,0.24};
CGFloat blue[] = {0.34,0.5,0.2,0.53,0.55,0.31,0.18,0.18,0.12,0.27,0.14,0.1,0.49,0.1,0.37,0.49,0.4,0.41,0.55,0.40};
for (int i = 0; i < 20; i++) {
[colours addObject: [UIColor colorWithRed:red[i] green:green[i] blue:blue[i] alpha:1.0]];
}
//Get data from server and parse it
...
}

现在,我才刚刚开始对 iPhone 进行编程,但我的猜测(顺便说一句,这是一个疯狂的猜测)是在 cellForRowAtIndexPath 中重新创建单元格,尽管一些属性是正在保存(如标题...)自定义背景不是。

有没有人遇到过这种行为?如果有,您是如何解决的?

编辑:甚至更奇怪的行为:有时,如果您向下和向上滚动,已经选择“默认”背景颜色的单元格会返回到它的自定义颜色。该行为似乎是随机的。

最佳答案

单元格背景颜色设置在很多地方,以确保显示的背景是您需要使用的背景:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

参见 this问题了解更多详情。如果您需要自定义选择颜色,那么您应该继承 UITableViewCell 并覆盖 - (void)setSelected:(BOOL)selected- (void)setHighlighted:(BOOL )高亮显示

关于iphone - 选定的 UITableViewCell 背景颜色在滚动时发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433406/

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