在特定行选择上更改 UITableView 所有行的标签颜色
Posted
技术标签:
【中文标题】在特定行选择上更改 UITableView 所有行的标签颜色【英文标题】:Change UITableView all row's label color on particular row selection 【发布时间】:2017-02-02 11:16:05 【问题描述】:我在UITableViewCell
中有一个UILabel
。在最后一行选择中,我需要更改所有行的 UILabel 的文本颜色。我该怎么做?
【问题讨论】:
使用 didselectselected 行方法,只为 select 设置一个索引值,在 cellForRowAtIndexPath 中检查 bool true 或 false 并设置颜色或标签 在 didSelectRowAt 方法中检查是否是最后一行。如果是最后一个单元格,则重新加载 UITableView。然后在方法 cellForRowAtIndexPath 中更改所有单元格中 UILabel 的颜色。在重新加载 tableview 之前更新标志以知道在点击最后一个单元格后重新加载了表格。 @HimanshuMoradiya 实际上我需要反之亦然,如果用户选择最后一行恢复为实际颜色。现在,如果使用 didselectselected 行方法,我正在更改 bool 值并重新加载 tableview,这是更改所有值的颜色,但是 .. 现在 diddeselect 不起作用.. !! tableView.reloadData() 你是否在最后一行重新加载你的表格 didselectselected 方法 是的,我做到了... 【参考方案1】:BOOL *selectlastindex;
- (void)viewDidLoad
[super viewDidLoad];
selectlastindex = NO;
// suggestionList is my NSArray (Data source)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (selectlastindex == YES)
if (indexPath.row == suggestionList.count - 1)
suggestiontitle.textColor = [UIColor blackColor];
else
suggestiontitle.textColor = [UIColor grayColor];
else
suggestiontitle.textColor = [UIColor blackColor];
return cell;
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"click");
if (indexPath.row == suggestionList.count - 1)
selectlastindex = YES;
[self.Tableview reloadData];
else
selectlastindex = NO;
[self.Tableview reloadData];
输出:CHECK OUTPUT
【讨论】:
谢谢.. 我会检查并告诉你。非常感谢 @Niharika 在执行之前检查我的输出是否完美? 是的。这是一样的。 @Niharika 你现在有答案了吗?【参考方案2】:你可以设置一个像isLastRowSelected
这样的布尔值,如果用户选择最后一行然后重新加载tableView,则将其设置为true。
在cellForRowAtIndexPath:
回调上,应用条件
if isLastRowSelected
cell.label.textColor = UIColor.desiredColor
else
cell.label.textColor = UIColor.defaultColor
希望它会有所帮助:)
完整解释:
在你的类中设置一个存储的属性
var isLastRowSelected = false
然后
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
// First add the selectedItem in your selectedItems and in the last add this
isLastRowSelected = selectedItems.count == datasource.count
tableView.reloadData()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if isLastRowSelected
cell.label.textColor = UIColor.desiredColor
else
cell.label.textColor = UIColor.defaultColor
【讨论】:
她想在最后一行选择时更改所有行的文本颜色。 你在尝试多选吗? @iProgrammer 是的。 然后只添加简单的逻辑:如果您的 dataSource 计数和 selectedItems 计数相同,则将 isLastRowSelected 设置为 true,例如 isLastRowSelected = dataSource.count == selectedItems.count。让我更新 @iProgrammer 实际上我需要反之亦然,如果用户选择最后一行恢复为实际颜色。现在,如果使用 didselectselected 行方法,我正在更改 bool 值并重新加载 tableview,这是更改所有值的颜色,但是 .. 现在 diddeselect 不起作用.. !!【参考方案3】:尝试在 willDisplayCell:
中调用您的着色代码:
- (void)tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
// do your logic here:
if (selectlastindex == YES)
if (indexPath.row == suggestionList.count - 1)
suggestiontitle.textColor = [UIColor blackColor];
else
suggestiontitle.textColor = [UIColor grayColor];
else
suggestiontitle.textColor = [UIColor blackColor];
【讨论】:
以上是关于在特定行选择上更改 UITableView 所有行的标签颜色的主要内容,如果未能解决你的问题,请参考以下文章
除了部分的特定行之外,是不是可以重新加载 UITableView?
选择 UITableView 中的所有行,并在数组中附加标签
滚动 uitableview 时更改特定的 uitableviewcell 行高
如何在 ListView 中正确更改特定行的背景颜色? (安卓)